2015-02-05 4 views
6

Ich habe folgendes Modell:Wie Sie verwandte Entitäten mit GraphDiff aktualisieren?

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

Aus dem Vorstehenden und GraphDiff verwenden, möchte ich den Kunden Aggregat wie folgt aktualisieren:

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

Aber die oben ist nichts Aktualisierung !!

Wie kann GraphDiff in diesem Fall korrekt verwendet werden?

+0

Sie können auch [ 'EntityGraphOperations'] verwenden (https://github.com/FarhadJabiyev/EntityGraphOperations) Bibliothek. Es ist sehr einfach zu bedienen. Und definiert automatisch die Zustände aller Entitäten und verwendet fließende Syntax. –

Antwort

6

GraphDiff unterscheidet grundsätzlich zwei Arten von Beziehungen: gehört und zugeordnet.

Der Besitz kann interpretiert werden als "ein Teil von" zu sein, was bedeutet, dass alles, was gehört, mit seinem Besitzer eingefügt/aktualisiert/gelöscht wird.

Die andere Art der Beziehung, die von GraphDiff behandelt wird, ist assoziiert, was bedeutet, dass nur die Beziehungen zu, aber nicht die assoziierten Entitäten selbst von GraphDiff beim Aktualisieren eines Graphen geändert werden.

Wenn Sie die AssociatedEntity -Methode verwenden, ist der Status der untergeordneten Entität nicht Teil des Aggregats. Mit anderen Worten, die Änderungen, die Sie über die untergeordnete Entität vorgenommen haben, werden nicht gespeichert, sondern nur die übergeordnete Navigationseigenschaft.

Verwenden Sie die OwnedEntity Methode, wenn Sie tha Änderungen über das Kind Entität speichern wollen, so empfehle ich Ihnen dies versuchen:

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