2011-12-16 33 views
11

我正在使用EF 4.0的项目中工作。实体框架中多个添加的实体可能具有相同的主键

Employee表中有一列ReferEmployeeID,其中包含引用系统中新员工的员工的员工ID。所以Employee是一个自引用表。

现在,如果没有添加到系统中的员工即将添加,并且他还引用了系统中的其他员工,则应该添加该行。

ActualEmployee保存没有叫,然后ReferEmployee.Employee = ActualEmployee

我理解的问题是,无论是员工的实际,并参考了员工ID设置为0,但如何来解决这个问题。

回答

18

假设在你的数据库表中的EmployeeID被定义为INT IDENTITY,那么你可以这样做:

// create two new employees - one refers to the other 
Employee john = new Employee { EmployeeID = -1, EmpName = "John" }; 
Employee peter = new Employee { EmployeeID = -2, EmpName = "Peter", ReferEmployeeID = -1 }; 

// add them to the EF model 
ctx.AddToEmployees(john); 
ctx.AddToEmployees(peter); 

// save changes 
ctx.SaveChanges(); 

因此,基本上,与“虚拟”定义你的新员工EmployeeID值,并建立链接(Peter引用John这里,通过它的“虚拟”ID)。

当保存到SQL Server这样,实体框架将处理得到真正EmployeeID价值观和EF会维持两个员工之间的链接(插入行时的SQL Server的手了)的过程。

+1

我一直在寻找这个答案约两个小时。我从来不知道EF以这种方式工作(使用虚拟身份)。这是记录或讨论任何地方?谢谢! – Mike 2013-01-03 21:07:39

相关问题