我正在使用一个自定义库,它为我生成类似于实体框架的DAL,但不完全相同,并且在使用RIA强加的问题时遇到了问题。我的问题是自定义DAL生成一个IsPersisted属性,该属性实质上标识实体是否具有相应的DB记录。删除代码的关键部分看起来像......
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 :(得分:0)
我通过将[RoundtripOriginal]应用于IsPersisted属性设法解决了这个特定问题。