我想在實體框架6中加載一個帶有AsNoTracking和LazyLoadingEnabled = false
的實體。在某些特殊情況下,我想顯式重新加載一些集合。我如何顯式加載分離實體的集合?如何將現有實體附加到泛型中的實體框架上下文中?
我正在尋找一個通用選項,將現有實體附加到上下文。
我的電話是這樣的:
var myCar = await this.myCarRepositoryAccessor.GetById(this.UnitOfWork, 1).ConfigureAwait(false);
this.UnitOfWork.LoadCollection(myCar, e => e.Driver);
GetById在DataRepository與這個樣子的:
public Task<TEntity> GetById(int id)
{
return id == 0
? Task.FromResult(default(TEntity))
: this.Context.InternalSet<TEntity>().AsNoTracking()?.SingleOrDefaultAsync(p => p.Id == id);
}
LoadCollection中的UnitOfWork樣子:
public void LoadCollection<TEntity, TElement>(TEntity entity, Expression<Func<TEntity, ICollection<TElement>>> navigationProperty) where TEntity : class, IEntity where TElement : class
{
//this.context.Entry(entity).State = EntityState.Unchanged
this.context.Entry(entity).Collection(navigationProperty).Load();
}
我試圖設置實體狀態爲Unchanged
但我收到此錯誤消息:
附加一個'MyCar'類型的實體失敗,因爲另一個相同類型的實體已經具有相同的主鍵值。如果圖中的任何實體具有衝突的鍵值,則使用「附加」方法或將實體的狀態設置爲「未更改」或「已修改」時可能會發生這種情況。這可能是因爲一些實體是新的並且還沒有收到數據庫生成的關鍵值。在這種情況下,使用'Add'方法或'Added'實體狀態來跟蹤圖形,然後根據情況將非新實體的狀態設置爲'Unchanged'或'Modified'。
您是否在加載集合之前嘗試過附加實體?例如'this.context.Set().Attach(entity);' –
DavidG
我只想在某些特殊情況下重新加載集合。這是有效的,如果我以前給它,我知道。 –
對不起,我不明白你在那裏說什麼。 – DavidG