我正在使用存儲庫模式來提供對我的集合的訪問和保存。更新整個集合的通用存儲庫
問題是更新由實體關係組成的聚合體。
例如,取Order
和OrderItem
的關係。聚合根是Order
,它管理自己的OrderItem
集合。因此,OrderRepository
將負責更新整個聚合(不存在OrderItemRepository
)。
數據持久性使用實體框架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
實體嗎?我怎麼能這樣做一般?
還有就是要增加對更改與圖表跟蹤更好的支持的建議 - HTTPS: //entityframework.codeplex.com/workitem/864,並有一個鏈接到graphdiff,可能會幫助 – Colin