zoukankan      html  css  js  c++  java
  • CSLA根对象、子对象切换的另一种方法

    学习CSLA.net后明白,CSLA.net  分为根对象和子对象,子对象可以嵌套,根对象是可以直接调用期Save 方法保存编辑结果的,而如果在子对象上调用相同的方法时,将抛出异常,子对象是不能直接保存的,只能由根对象负责子对象的保存。

    但有时情况并非如此, 比如:有个 Role 对象,需要列表显示在Gridview 上的,数据源为 RoleList,RoleList为根对象,Role 为子对象,如果需要编辑选中的Role 对象实例时,把此对象当做构造函数的参数传递给编辑窗口,此时保存时将产生不能直接保存子象的错误,如果根据ID号查询一个新的对象(根对象)时,一切正常,但增加了服务器往返,另外,需要刷新Gridview 的列表来同步显示最新的编辑结果,这将导致更多不必的服务器往返,当然,这不是个很好的解决方法。

    我的做法和CSLA.net 的标准做法不同,在RoleList 加载时(Fetch)时调用Role的Child_Fetch方法时,特别标注对象不是子对象,这样就可以解决上述问题。 

    示例代码:

    代码
    private void DataPortal_Fetch(PartyListCriteria criteria)
    {
                RaiseListChangedEvents 
    = false;

                DALParty[] ps 
    = DALParty.Find(criteria.OwnerID, criteria.Name);
                
    if (ps != null && ps.Length > 0)
                {
                    
    foreach (DALParty item in ps)
                    {
                        Party temp 
    = Party.GetByID(item.ID);
                        
    //this.Add(DataPortal.FetchChild<Party>((item)));
                        this.Add(temp);
                    }
                }

                RaiseListChangedEvents 
    = true;
    }
  • 相关阅读:
    oracle 11g行转列 列转行
    System.Data.OracleClient 需要 Oracle 客户端软件 8.1.7 或更高版本
    ORA-00257: 归档程序错误。在释放之前仅限于内部连接
    java 回传参数
    Oracle 删除表分区
    Oracle 删除重复数据只留一条
    cmd下windows批处理,获取当前系统时间,生成日志文件名
    c# 应用程序部署发布
    eclipse 集成 STS 插件
    Mamen所需要的jar包怎么生成
  • 原文地址:https://www.cnblogs.com/yyj/p/1756902.html
Copyright © 2011-2022 走看看