2015-02-05 9 views
6

Aşağıdaki modeli vardır: YukarıdanGraphDiff kullanarak ilgili varlıklar nasıl güncellenir?

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

ve GraphDiff kullanarak, ben aşağıdaki gibi müşteri agrega güncellemek istiyorum:

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

Ama yukarıda bir şey güncellenmiyorsa !!

Bu durumda GraphDiff'i kullanmanın doğru yolu nedir? olunan ve ilişkili :

+0

Ayrıca [ 'EntityGraphOperations'] kullanabilirsiniz (https://github.com/FarhadJabiyev/EntityGraphOperations) kitaplığı. Kullanımı çok kolay. Ve tüm varlıkların durumlarını otomatik olarak tanımlar ve akıcı sözdizimi kullanır. –

cevap

6

GraphDiff temelde ilişkilerin iki tür ayırt eder.

Sahip olunan herhangi bir şeyin sahibiyle birlikte eklenmesi/güncelleştirilmesi/silinmesi anlamına gelen "bir parçası olma" olarak yorumlanabilir. GraphDiff tarafından ele alınan diğer bir ilişki ile ilişkilidir, bu da bir grafiği güncelleştirirken sadece ilişkili nesnelerin kendileriyle olan ilişkilerinin GraphDiff tarafından değiştirildiği anlamına gelir.

AssociatedEntity yöntemini kullandığınızda, alt öğenin durumu bir arada değil, başka bir deyişle, alt öğe üzerinde yaptığınız değişiklikler kaydedilmeyecek, yalnızca üst üste gelme özelliğini güncelleyecektir.

Kullanım Seni bu deneyin önermek, çocuk işletme üzerinde tha değişiklikleri kaydetmek istiyor, öyleyse OwnedEntity yöntemi:

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