我的RIA服务上下文类有一个实体集TaskToOperationAssociations,其中包含一个Task to Operation关联列表。
有没有办法“找到”已从集合中删除的关联实体?我可以看到上下文在其私有字段中引用了已删除的Association(显然需要跟踪它以便可以提交删除操作)。
这是一个例子......
如果我有与操作X相关的任务“A”(具有Id = T1),则Y和Z(具有id的O1,O2和O3)和任务B(具有Id = T2)与相同的操作相关联然后该集合将包含3个TaskToOperationAssociations,如下所示......
我删除关联A1并捕获TaskToOperationAssociations的属性更改事件。在事件处理程序中,我想知道任务T1的任何关联是否已更改,因此我可以在UI上启用保存按钮。
希望这是有道理的。 谢谢 本
答案 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)
仅使用上下文无法做到这一点。我通过手动包装上下文和跟踪删除来修复它。