我很難更新實體框架中的實體。使用實體框架4.3更新實體 - 代碼優先
場景: - 我加載新的DbContext()GetById(GUID)一個實體 - 我嘗試使用擴展方法來保存這個實體,那麼使用新的DbContext()
我的繼承人更新方法:
public virtual void Update(IEntity entityToUpdate)
{
var dbEntry = Context.Entry(entityToUpdate);
if (dbEntry == null) return;
if (Context.Entry(entityToUpdate).State == EntityState.Detached)
DbSet.Attach(entityToUpdate);
else
{
dbEntry.CurrentValues.SetValues(entityToUpdate);
Context.Entry(entityToUpdate).State = EntityState.Modified;
}
Context.SaveChanges();
}
這是我的一個嘗試的集合。如果我使用SetValues,我被告知該實體被分離並因此不可能,並且如果使用附加,我會得到以下錯誤: 'ObjectStateManager中已存在具有相同鍵的對象。 ObjectStateManager不能使用同一個鍵跟蹤多個對象。'
我明顯在做一些根本性的錯誤。有人可以幫助我在正確的方向嗎?
UPDATE:
protected void TransferClubs(object sender, EventArgs e)
{
var clubHelper = new ClubHelper();
var club = clubHelper.GetClub(new Guid("A009D0CD-71C4-42E8-88E2-037F059B12EE"));
club.AddUser(Guid.NewGuid(), ClubRoleType.Admin);
club.AddUser(Guid.NewGuid(), ClubRoleType.Admin);
club.Save();
}
public static bool Save(this ClubItem item)
{
var clubHelper = new ClubHelper();
clubHelper.AddOrUpdate(item);
return true;
}
public ClubItem AddOrUpdate(ClubItem item)
{
if (item.Id == Guid.Empty)
Insert(item);
else
Update(item);
return item;
}
而你在我原來的職位看Update()方法...
你能給出一個加載實體,改變它然後調用這個Update方法的完整上下文的例子嗎?你說更新發生在一個「新的DbContext()」中,但是你有一個關於已經存在的(=附加的)具有相同鍵的對象的例外。我無法想象這會發生在一個*新的*上下文中。 – Slauma
新增所有玩法。添加用戶將新用戶添加到ICollection集合 –
Kulvis
'ClubHelper'創建一個新的上下文,'GetClub'從DB加載一個現有的俱樂部,'AddUser'應該創建一個新用戶,將其插入到數據庫並設置一個參考去俱樂部吧? – Slauma