检测复合子项已删除

时间:2012-06-25 13:24:22

标签: ria

给定包含子集合的父级,归属于:

[Include, Composition]
public virtual ICollection<FieldValue> FieldValues {get;set;}

[Include, Composition] public virtual ICollection<FieldValue> FieldValues {get;set;}

并加载:

Context.Load(Context.GetQuery(),LoadBehavior.RefreshCurrent,true);

我发现其他用户或后台进程删除的FieldValues不会从客户端上下文中删除。我可以看到这是如何设计的,但我该如何解决这个问题呢?有没有办法插入加载过程来处理已删除的项目?

加载回调发生得太晚了,看起来很糟糕 - 一切都已经合并了,没有什么可比的。

1 个答案:

答案 0 :(得分:1)

想出来。给定父类Root,这是运行加载的方式:

var originalValues = Context.EntityContainer
    .GetEntitySet<FieldValue>()
    .ToList(); // <-- make the pre-load copy of the child entities

Context.Load(Context.GetQuery(),
    LoadBehavior.RefreshCurrent,
    (LoadOperation<Root> o) =>
    {
        (from v in originalValues
        join nv in o.AllEntities.OfType<FieldValue>() on v equals nv into g
        from existing in g.DefaultIfEmpty()
        where existing == null
        select v)
        .ToList()
        .ForEach(Context.EntityContainer.GetEntitySet<FieldValue>().Detach);
    },
    null);

注意:FieldValue实现IEquatable&lt;&gt;,如果您的孩子没有使用PK