我正在使用存储库模式来提供对我的聚合的访问和保存。
问题是更新由实体关系组成的聚合。
例如,采取Order
andOrderItem
关系。聚合根Order
管理自己的OrderItem
集合。因此AnOrderRepository
将负责更新整个聚合(不会有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
实体吗?我怎么能一般地做到这一点?