RIA服务:枚举已删除的实体

时间:2011-03-01 13:49:53

标签: .net silverlight silverlight-4.0 ria silverlight-toolkit

我的RIA服务上下文类有一个实体集TaskToOperationAssociations,其中包含一个Task to Operation关联列表。

有没有办法“找到”已从集合中删除的关联实体?我可以看到上下文在其私有字段中引用了已删除的Association(显然需要跟踪它以便可以提交删除操作)。

这是一个例子......

如果我有与操作X相关的任务“A”(具有Id = T1),则Y和Z(具有id的O1,O2和O3)和任务B(具有Id = T2)与相同的操作相关联然后该集合将包含3个TaskToOperationAssociations,如下所示......

  1. 关联A1,TaskId = T1,OperationID = 1
  2. 关联A2,TaskId = T1,OperationID = 2
  3. 关联A3,TaskId = T1,OperationID = 3
  4. 关联A4,TaskId = T2,OperationID = 1
  5. 关联A5,TaskId = T2,OperationID = 2
  6. 关联A6,TaskId = T2,OperationID = 3
  7. 我删除关联A1并捕获TaskToOperationAssociations的属性更改事件。在事件处理程序中,我想知道任务T1的任何关联是否已更改,因此我可以在UI上启用保存按钮。

    希望这是有道理的。 谢谢 本

3 个答案:

答案 0 :(得分:1)

您可以枚举ChangeSet,ChangeSet将包含提交之前的所有内容。在服务器端,您可以拦截OnSaveChanges并枚举ChangeSet。

对于现有的关联更改,大多数更改集将包含外键的更改。您当前的Context的实体容器将包含尚未提交的ChangeSet。

答案 1 :(得分:1)

也许这可以帮到你

var deleted = Context.EntityContainer.GetChanges().RemovedEntities
    .Where(re => re is TaskToOperationAssociations && ((TaskToOperationAssociations)re.GetOriginal()).TaskId == T1.Id)
    .Select(re => (TaskToOperationAssociations)re);

或只是

var hasDeleted = Context.EntityContainer.GetChanges().RemovedEntities
    .Any(re => re is TaskToOperationAssociations && ((TaskToOperationAssociations)re.GetOriginal()).TaskId == T1.Id)

查明T1是否有任何已删除的关联

foreach (var assoc in deleted)
{
   Context.TaskToOperationAssociations.Add(assoc);
   ((IRevertibleChangeTracking)assoc).RejectChanges();
   ((IRevertibleChangeTracking)T1).RejectChanges();
}

您可以完全撤消删除(如果您尚未提交更改)

答案 2 :(得分:0)

仅使用上下文无法做到这一点。我通过手动包装上下文和跟踪删除来修复它。