【发布时间】:2011-03-16 17:14:26
【问题描述】:
我正在使用 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 中拒绝特定的已删除项目。
谢谢,
【问题讨论】:
-
欢迎来到 SO,请花几分钟时间阅读常见问题解答和 Markdown 文档(编辑问题时右侧空白处提供了有用的概要)。
标签: c# silverlight-4.0 wcf-ria-services rollback domaincontext