多个添加的实体在实体框架中可以有相同的主键

本文关键字:实体 添加 框架 | 更新日期: 2023-09-27 18:18:06

我在一个使用EF 4.0的项目中工作。

Employee表有一个列ReferEmployeeID,其中包含在系统中引用新员工的员工的员工id。因此,Employee是一个自引用表。

现在,如果一个未添加到系统中的员工即将添加,并且他还引用了系统中的另一个员工,则应该将该行添加到一起。

ActualEmployee save not called then ReferEmployee.Employee = ActualEmployee

我理解的问题是,员工实际和参考都有员工ID设置为0,但如何解决这个问题。

多个添加的实体在实体框架中可以有相同的主键

假设数据库表中的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值的过程(SQL Server在插入行时分发),EF将维护两个雇员之间的链接。