Я использую шаблон репозитория, чтобы обеспечить доступ и сохранение моих агрегатов.
Проблема заключается в обновлении агрегатов, которые состоят из отношения сущностей.
Например, возьмите отношения 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
? Как я мог сделать это в целом?