使用graphdiff进行条件映射

Mas*_*oud 35 c# entity-framework ef-code-first graphdiff

我有以下实体DbContext:

在此输入图像描述

public class A
{
   public A()
   {
       Bs = new List<B>(); 
   }

   public ICollection<B> Bs { set; get; }
}   
Run Code Online (Sandbox Code Playgroud)

有时我想更新a图表:

var a = dbContext.As
       .AsNoTracking()
       .Include(x=>x.Bs)
       .firstOrDefault();

var c = new C();
a.Bs.Add(c);

var d = new D();
var e1 = new E();
var e2 = new E();
d.Es.Add(e1); //<-- added new E
d.Es.Add(e2); //<-- added new E

a.Bs.Add(d);
Run Code Online (Sandbox Code Playgroud)

我想更新aBs(更新C,D,E使用过多)graphdiff:

dbContext.UpdateGraph(a,map=>map.OwnedCollection(x=>x.Bs));
Run Code Online (Sandbox Code Playgroud)

这更新A,Bs,Cs,Ds,但不是Es.

所以我想,我需要定义条件映射graphdiff,以便更新Es,例如:

dbContext.UpdateGraph(a,map=>map.OwnedCollection(x=>x.Bs.OfType<D>(), 
                                             with =>with.OwnedCollection(t=>t.Es))
                                .OwnedCollection(x=>x.Bs.OfType<C>()));
Run Code Online (Sandbox Code Playgroud)

有办法做这个工作吗?

Yas*_*ser 1

您可以将其与 graphdiff 一起使用:

dbContext.UpdateGraph(a, map => map
    .OwnedCollection(b => p.Bs, with => with
    .AssociatedCollection(p => p.Es)));
Run Code Online (Sandbox Code Playgroud)

请参阅此链接: GraphDiff 解释