2015-02-05 5 views
6

Ho il seguente modello:Come aggiornare le entità correlate usando GraphDiff?

public class Customer 
{ 
    public int Id {get; set;} 
    public string Name {get; set;} 
    public int AddressId {get; set;} 
    public virtual Address Address {get; set;} 
    public virtual ICollection<CustomerCategory> Categories {get; set;} 
} 

public class CustomerCategory 
{ 
    public int Id {get; set;} 
    public int CustomerId {get; set;} 
    public int CategoryId {get; set;} 
    public virtual Category Category {get; set;} 
} 

public class Address 
{ 
    public int Id {get; set;} 
    public string Street{get; set;} 
    public virtual PostCode PostCode {get; set;} 
} 

Da quanto sopra, e l'utilizzo di GraphDiff, voglio aggiornare l'aggregato cliente come segue:

dbContext.UpdateGraph<Customer>(entity, 
      map => map.AssociatedEntity(x => x.Address) 
         .OwnedCollection(x => x.Categories, with => with.AssociatedEntity(x => x.Category))); 

Ma quanto sopra non è l'aggiornamento nulla !!

Qual è il modo corretto di utilizzare GraphDiff in questo caso?

+0

È anche possibile utilizzare [ 'EntityGraphOperations'] (https://github.com/FarhadJabiyev/EntityGraphOperations). È molto facile da usare E definisce automaticamente gli stati di tutte le entità e utilizza la sintassi fluente. –

risposta

6

GraphDiff distingue fondamentalmente due tipi di relazioni: di proprietà e associati.

Di proprietà può essere interpretato come "essere parte di" significa che tutto ciò che è di proprietà sarà inserito/aggiornato/cancellato con il suo proprietario.

L'altro tipo di relazione gestito da GraphDiff è associato, il che significa che solo le relazioni con, ma non le entità associate sono modificate da GraphDiff durante l'aggiornamento di un grafico.

Quando si utilizza il metodo AssociatedEntity, lo stato dell'entità figlio non fa parte dell'aggregazione, in altre parole, le modifiche apportate sull'entità figlio non verranno salvate, ma aggiornerà la proprietà di navigazione padre.

Utilizzare il metodo OwnedEntity se si desidera salvare THA cambiamenti nel corso dell'entità bambino, così, vi consiglio di provare questo:

dbContext.UpdateGraph<Customer>(entity, map => map.OwnedEntity(x => x.Address) 
                .OwnedCollection(x => x.Categories, with => with.OwnedEntity(x => x.Category))); 
dbContext.SaveChanges();