2012-10-31 49 views
1

我正在使用自定义库为我生成类似于实体框架但不完全相同的DAL,并且使用RIA强加给它的问题。我的问题是,自定义DAL生成一个IsPersisted属性,它基本上标识实体是否具有相应的数据库记录。删除代码的关键部分看起来像...SIlverlight 5 RIA组合子实体删除

if(this.IsPersisted) 
    dataAccessor.Delete(); 
else 
    throw new NotSupportedException("Delete not supported on unpersisted entities."); 

当我使用RIA生成客户端和服务器之间的介质时,问题出现了。我有一个孩子组成物业的父类像

class Parent{ 
    ... 
    [Include,Association("Parent_Child","ParentId","ParentId",IsForeignKey=false), Composition] 
    public List<Child> Children{get{return (_children = _children??new List<Child>());}} 
} 

在客户端的代码,如果我再使用parent.Children.Remove(child);正确的实体动作被传递到服务器,但为IsPersisted标志被更改为false时更改集生成这反过来导致NotSupportedException

我做了很多挖掘和探索。在检查回到服务器的实际网络流量后,我发现发送给服务器的ChangeSet实际上包含该缺陷。它正确地公开了原始实体和值,但是然后在变更集的删除段中,我可以看到同样的实体(通过相同的身份验证)再次指定为OriginalEntity,但是这次除ID之外,所有的值都是空的。

如果我跟踪ChangeSet的反序列化,我可以看到它实际上创建了Child的两个单独实例,首先正确填充,然后再次清零。 ChangeSet然后只保存孩子的零化版本。

有关如何解决RIA发送电线的任何想法?

回答

0

这是我通过将[RoundtripOriginal]应用于IsPersisted属性来解决的特定问题。