【问题标题】:reject a particular deleted item from a DomainContext从 DomainContext 拒绝特定的已删除项目
【发布时间】: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


【解决方案1】:

经过一番打猎,我找到了Colin Blair says:的位置

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

除了删除每个实体之外,您是否可以将布尔属性设置为 false,并在完成后删除标志设置为 false 的实体?

【讨论】:

    猜你喜欢
    • 2017-07-10
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多