CSLA根对象、子对象切换的另一种方法

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

 

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

 

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

 

示例代码:

ExpandedBlockStart.gif 代码
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 ;
}

 

 

转载于:https://www.cnblogs.com/yyj/archive/2010/06/12/1756902.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值