C# 拒绝域上下文中的特定已删除项
我正在使用Silverlight4和Ria服务: 如果我们有一个表(称为“MyTable”),其中有3条记录(1、2、3),我刚刚在应用程序的某个地方编写了以下代码:C# 拒绝域上下文中的特定已删除项,c#,silverlight-4.0,wcf-ria-services,rollback,domaincontext,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
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不适用于已删除/添加的项目(它只适用于已修改的项目)
那么,有没有办法从DomainContext中拒绝特定的已删除项
谢谢,经过一番打猎,我找到了 每个RIA服务实体都实现IRevertibleChangeTracking接口。您只需将实体强制转换为IRevertibleChangeTracking并调用RejectChanges。RejectChanges不适用于新实体或已删除实体
除了删除每个实体,您是否可以将布尔属性设置为false,并在完成后删除标志设置为
false
的实体?再搜索一下,我发现
每个RIA服务实体都实现IRevertibleChangeTracking接口。您只需将实体强制转换为IRevertibleChangeTracking并调用RejectChanges。RejectChanges不适用于新实体或已删除实体
除了删除每个实体,您是否可以将布尔属性设置为false,并在完成后删除标志设置为
false
的实体?欢迎使用SO,请花几分钟时间阅读常见问题解答和标记文档(编辑问题时,右边空白处有一个有用的语法)。欢迎使用SO,请花几分钟时间阅读常见问题解答和降价文档(编辑问题时,可在右边空白处找到该文档的有用语法)。
((IRevertibleChangeTracking) DeletedItem ).RejectChanges();