2

我使用DB第一種方法,EF 4.1與DbContext POCO代碼gen。多對多插入失敗 - 實體框架4.1 DbContext

我的數據庫有許多一對多的關係如下圖所示:

員工

僱員

EmployeeName

帳戶

ACCOUNTID

帳戶名

EmployeeAccount

僱員

ACCOUNTID

當我試圖插入一個新員工,併爲其指定一個預先存在的帳戶出現問題,所以我基本上這樣做如下:

Employee emp = new Employee(); 
emp.EmployeeName = "Test"; 
emp.Accounts.Add(MethodThatLooksUpAccountByName("SomeAccountName")); 

context.Employees.Add(emp); 
context.SaveChanges(); 

正在執行(不正確)的SQL,正試圖插入一個新的[Account]記錄,並且這在違反約束時失敗。當然,它不應該插入一個新的[Account]記錄,它應該只在插入[Employee]後插入一個新的[EmployeeAccount]記錄。

有什麼建議嗎?謝謝。

回答

1

MethodThatLooksUpAccountByName這個方法返回一個連接或分離的對象嗎?在任何情況下,您都可以嘗試附加它返回到上下文的對象。

Employee emp = new Employee(); 
emp.EmployeeName = "Test"; 
var acc = MethodThatLooksUpAccountByName("SomeAccountName"); 
context.Attach(acc); //I don't remember if it's attach or attachobject, but intellisense should help you there. 
emp.Accounts.Add(acc); 

context.Employees.Add(emp); 
context.SaveChanges(); 
+0

是的,它是分離的,因爲我處理方法中的上下文。儘管Attach()方法在實體集合本身上,但不在上下文中,您的解決方案仍可正常工作。謝謝,不知道我是如何錯過這個的。 – EkoostikMartin

+0

請隨時編輯,我不記得確切的語法。 –