Как обновить связанные объекты с помощью 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 в этом случае?


person Ivan-Mark Debono    schedule 05.02.2015    source источник
comment
Вы также можете использовать библиотеку EntityGraphOperations. Это очень простой в использовании. И автоматически определяет состояния всех сущностей и использует свободный синтаксис.   -  person Farhad Jabiyev    schedule 14.09.2016


Ответы (1)


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

Принадлежность можно интерпретировать как «часть чего-либо», что означает, что все, что принадлежит, будет вставлено/обновлено/удалено вместе с его владельцем.

Другой тип отношений, обрабатываемых GraphDiff, связанный, что означает, что GraphDiff изменяет только отношения, но не сами связанные объекты при обновлении графика.

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

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

dbContext.UpdateGraph<Customer>(entity,  map => map.OwnedEntity(x => x.Address)
                                                   .OwnedCollection(x => x.Categories, with => with.OwnedEntity(x => x.Category)));
dbContext.SaveChanges();
person octavioccl    schedule 05.02.2015
comment
не могли бы вы рассказать мне об использовании AssociatedCollection и AssociatedEntity с образцом? - person Amir; 14.05.2019