2015-02-05 1 views
6

У меня есть следующие модели:Как обновить связанные объекты с помощью 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;} 
} 

Из вышеизложенного и с помощью GraphDiff, я хочу, чтобы обновить агрегат клиента следующим образом:

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

Но выше ничего не обновляется !!

Каков правильный способ использования GraphDiff в этом случае?

+0

Вы также можете использовать [ 'EntityGraphOperations'] (https://github.com/FarhadJabiev/EntityGraphOperations). Он очень прост в использовании. И автоматически определяет состояния всех объектов и использует свободный синтаксис. –

ответ

6

GraphDiff в основном отличает два вида отношений: принадлежит и связано.

Собственный может быть истолкован как «являющийся частью», означающий, что все, что принадлежит, будет вставлено/обновлено/удалено его владельцем.

Связано другое отношение, связанное с GraphDiff, что означает, что только изменения, связанные с, но не с соответствующими объектами, изменяются GraphDiff при обновлении графика.

Когда вы используете метод AssociatedEntity, состояние дочернего объекта не является частью совокупности, другими словами, изменения, которые вы сделали над дочерним объектом, не будут сохранены, просто он обновит свойство родительского невозобновления.

Используйте OwnedEntity метод, если вы хотите, чтобы сохранить изменения Tha над дочерней сущности, поэтому я предлагаю вам попробовать это:

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