拒绝DomainContext中的特定已删除项

时间:2010-07-16 00:13:53

标签: c# silverlight-4.0 wcf-ria-services rollback domaincontext

我正在使用Silverlight4和Ria服务:

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

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中的特定已删除项目。

谢谢,

1 个答案:

答案 0 :(得分:0)

经过多次狩猎后,我找到了Colin Blair says:

的位置
  

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

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