SIlverlight 5 RIA组合子实体删除

时间:2012-10-31 13:24:51

标签: silverlight serialization ria changeset

我正在使用一个自定义库,它为我生成类似于实体框架的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发送线路的任何想法?

1 个答案:

答案 0 :(得分:0)

我通过将[RoundtripOriginal]应用于IsPersisted属性设法解决了这个特定问题。