Я использую шаблон репозитория, чтобы обеспечить доступ и сохранение моих агрегатов.
Проблема заключается в обновлении агрегатов, которые состоят из отношения сущностей.
Например, возьмите отношения Order и OrderItem. Совокупный корень Order, который управляет собственной коллекцией OrderItem. Таким образом, OrderRepository отвечает за обновление всего совокупности (не было бы OrderItemRepository).
Перенос данных обрабатывается с использованием Entity Framework 6.
Обновить метод репозитория (DbContext.SaveChanges() происходит в другом месте):
public void Update(TDataEntity item)
{
var entry = context.Entry<TDataEntity>(item);
if (entry.State == EntityState.Detached)
{
var set = context.Set<TDataEntity>();
TDataEntity attachedEntity = set.Local.SingleOrDefault(e => e.Id.Equals(item.Id));
if (attachedEntity != null)
{
// If the identity is already attached, rather set the state values
var attachedEntry = context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(item);
}
else
{
entry.State = EntityState.Modified;
}
}
}
В моем примере выше будет обновлен только объект Order, а не связанная с ним коллекция OrderItem.
Должен ли я привязывать все объекты OrderItem? Как я мог сделать это в целом?