Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Conditional mapping with graphdiff

I have following entities in my DbContext:

enter image description here

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

Sometimes I Want to update a graph:

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); 

I want to update a with its Bs(update C,D,E too) using graphdiff:

dbContext.UpdateGraph(a,map=>map.OwnedCollection(x=>x.Bs)); 

This updates A, Bs, Cs, Ds, but not Es.

So I think, I need to define a conditional mapping for graphdiff, to update Es too, somethings like:

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

Is there any way to do this job?

like image 864
Masoud Avatar asked Sep 09 '15 09:09

Masoud


1 Answers

You can use this with graphdiff:

dbContext.UpdateGraph(a, map => map     .OwnedCollection(b => p.Bs, with => with     .AssociatedCollection(p => p.Es))); 

see this link: GraphDiff Explanation

like image 121
Yaser Avatar answered Sep 30 '22 01:09

Yaser