给定包含子集合的父级,归属于:
[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不会从客户端上下文中删除。我可以看到这是如何设计的,但我该如何解决这个问题呢?有没有办法插入加载过程来处理已删除的项目?
加载回调发生得太晚了,看起来很糟糕 - 一切都已经合并了,没有什么可比的。
答案 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