2

我正在使用 Silverlight4 和 Ria 服务:

想象我们有一个包含 3 条记录( 1 、 2 、 3 )的表(称为“MyTable”),我刚刚在我的应用程序的某处编写了以下代码:

CurrentItem  = 1;
MyContext.MyTables.Delete(CurrentItem);
CurrentItem  = 2;
MyContext.MyTables.Delete(CurrentItem);

由于某些原因,在点击“保存”按钮之前,我想拒绝第一个删除的项目(1)但仍然想删除第二个(2)。这意味着我不能使用:

MyContext.RejectChanges()  

因为它会拒绝所有更改(包括我想要删除的已删除项目)所以我使用 IRevertibleChangeTracking 可以解决我的问题。像这样的事情:

((IRevertibleChangeTracking) MyItem).RejectChanges();

但是在使用这个接口之前,我必须访问已删除的项目。起初,它试图通过 MyContext.MyTables 获取它,但它不包含已删除的记录,所以我尝试通过 EntityChangeSet 获取它:

EntityChangeSet Changes =  MyContext.EntityContainer.GetChanges();
MyTable  DeletedItem  = Changes.First<MyTables>( e => e.ID = 1 ) ;

然后我使用了 IRevertibleChangeTracking:

((IRevertibleChangeTracking) DeletedItem  ).RejectChanges();

但是在运行之后,这行代码并没有改变记录的状态,它被保持为“已删除”,所以通过点击“保存”按钮,它被物理地从数据库中删除了!!!!!!似乎 IRevertibleChangeTracking 不适用于已删除/添加的项目(它仅适用于修改后的项目)。

那么,有没有办法从 DomainContext 中拒绝特定的已删除项目。

谢谢,

4

1 回答 1

0

经过一番打猎,我找到了科林布莱尔所说的:

每个 RIA 服务实体都实现 IRevertibleChangeTracking 接口。您所要做的就是将您的实体转换为 IRevertibleChangeTracking 并调用 RejectChanges。RejectChanges 不适用于新的或已删除的实体。

您可以将布尔属性设置为 false,而不是删除每个实体,然后在完成后删除标志设置为的实体false吗?

于 2012-12-10T06:47:57.680 回答