1

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

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 实际上包含该缺陷。它正确地公开了原始实体和值,但是在变更集的 Delete 段中,我可以看到再次指定为 OriginalEntity 的相同实体(由相同身份验证),但这次除了 ID 之外所有值都是空的。

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

关于如何修复 RIA 发送的任何想法?

4

1 回答 1

0

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

于 2012-11-02T15:39:50.040 回答