我正在使用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中的特定已删除项目。
谢谢,
答案 0 :(得分:0)
经过多次狩猎后,我找到了Colin Blair says:
的位置每个RIA Services实体都实现了IRevertibleChangeTracking接口。您所要做的就是将您的实体强制转换为IRevertibleChangeTracking并调用RejectChanges。 RejectChanges不适用于新实体或已删除实体。
您可以将boolean属性设置为false,而不是删除每个实体,完成后删除标志设置为false
的实体吗?