我一直試圖調試一下,並以不同的方式表達我想要做的事情,但我沒有運氣。我對這個實體框架一無所知,而且我從另一個不在身邊的開發人員那裏繼承了這些代碼,所以我對這個模型一無所知。也許有人可以讓我指出正確的方向。這是我的代碼:實體框架向數據庫添加新行引發的異常
//Append note to project notes too
task.TPM_PROJECTVERSIONReference.Load();
TPM_PROJECTVERSIONNOTES newNote = new TPM_PROJECTVERSIONNOTES();
newNote.TS = System.DateTime.Now;
newNote.TPM_USER = SessionHandler.LoginUser;
newNote.NOTES = task.NOTES;
newNote.PROJECTID = this.ProjectId;
newNote.VERSIONID = this.VersionId;
task.TPM_PROJECTVERSION.TPM_PROJECTVERSIONNOTES.Add(newNote); //<-- Exception
我有「任務」,它指向它所屬的項目版本。這些項目有一堆筆記。我想添加一個新的筆記到任務的項目。然而,我得到的最後一行的異常:
System.InvalidOperationException了未處理的用戶代碼
消息=兩個對象之間的關係不能限定,因爲它們連接到不同的ObjectContext對象 。
源= System.Data.Entity的
這似乎應該是一個非常簡單的事情。這不是正確的方法嗎?謝謝!
編輯:
好,我移除了函數的所有其他代碼,並創造了一個全新的環境。這裏就是整個函數現在從開始到結束:
//Append note to project notes too
using (TPMEntities context = new TPMEntities(General.EntityName()))
{
TPM_PROJECTVERSIONNOTES newNote = context.TPM_PROJECTVERSIONNOTES.CreateObject();
newNote.TS = System.DateTime.Now;
newNote.TPM_USER = SessionHandler.LoginUser;
newNote.NOTES = this.txtTaskNotes.Text;
TPM_PROJECTVERSION version = (from pv in context.TPM_PROJECTVERSION
where pv.PROJECTID == this.ProjectId && pv.VERSIONID == this.VersionId
select pv).First();
version.TPM_PROJECTVERSIONNOTES.Add(newNote);
context.SaveChanges();
}
不過,我得到相同的異常:
System.InvalidOperationException was unhandled by user code
Message=The relationship between the two objects cannot be defined because they are attached to different ObjectContext objects.
Source=System.Data.Entity
我簡直不明白怎麼可以有兩個背景?我在代碼中的每個地方使用「上下文」。實體框架如何使我們的數據庫中簡單添加一行變得非常困難?
這解決了這個問題,非常感謝! –