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

man*_*der 12 c# entity-framework

我正在使用EF 4.0进行项目.

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

现在,如果未添加到系统的员工即将添加,并且他还引用系统中的其他员工,则应该完全添加该行.

ActualEmployee 保存尚未调用然后 ReferEmployee.Employee = ActualEmployee

我理解问题是员工实际和推荐都将员工ID设置为0,但是如何解决这个问题.

mar*_*c_s 24

假设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();
Run Code Online (Sandbox Code Playgroud)

因此,基本上,使用"虚拟" EmployeeID值定义新员工并建立链接(此处Peter引用John,通过其"虚拟"ID).

将此保存到SQL Server时,实体框架将处理获取实际 EmployeeID值的过程(SQL Server在插入行时将其分发),EF将维护两个员工之间的链接.

  • 我一直在寻找这个答案大约两个小时.我从来不知道EF是这样工作的(使用虚拟身份).在任何地方记录或讨论过吗?谢谢! (2认同)