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

请随时编辑,我不记得确切的语法。 –