我需要使用實體框架4.1(POCO)在單擊按鈕上單擊更新100條記錄。我需要將修改後的記錄保存到數據庫中,而不進行數據庫往返(以避免性能問題)。在實體框架中更新記錄的最佳做法是什麼?
我已經看到一些解決方案與附加。
得到錯誤的附加 一個實體對象不能被IEntityChangeTracker的多個實例
所以嘗試分離第一次引用,得到了新的錯誤 對象不能被分離,因爲它沒有連接到ObjectStateManager
我使用存儲庫模式來獲取實體列表並傳遞到UI層綁定在gri d。
在按鈕點擊,我傳遞這些實體返回DB層更新。
它工作正常,選擇實體並執行context.applychanges。我需要避免這種往返行程,以解決性能問題。
public void Update(OPRPortCall portCall)
{
using (VMEntities context = new VMEntities())
{
context.Detach(portCall); //The object cannot be detached because it is not attached to the ObjectStateManager.
context.AttachTo("OPRPortCalls", portCall); //An entity object cannot be referenced by multiple instances of IEntityChangeTracker
context.ObjectStateManager.ChangeObjectState(portCall, EntityState.Modified);
context.SaveChanges();
}
}
向我提供任何解決方案。
克里斯托弗
你能後的更新代碼?特別是,當你打開和關閉dbcontext。 – 2013-02-21 11:07:06
「所以先嚐試分離,得到新的錯誤」 - 您需要將它從它所連接的上下文中分離出來。它不會附加到新的上下文中,因此將它從新的上下文中分離出來並不是也不行。但是如果你仍然有舊的上下文(並且你做了,否則該實體不能被附加到它),爲什麼不直接在這個舊的上下文中調用'SaveChanges()'? – hvd 2013-02-21 11:22:27
dtryon更新了代碼。請檢查。 – ChristopherJ 2013-02-21 11:22:53