2011-12-16 14 views
11

Estoy trabajando en un proyecto usando EF 4.0.Múltiples entidades agregadas pueden tener la misma clave principal en Entity Framework

La tabla Employee tiene una columna ReferEmployeeID que contiene la identificación del empleado que está refiriendo a un nuevo empleado en el sistema. Entonces, Employee es una tabla autorreferencial.

Ahora, en el caso de que un empleado que no está agregado al sistema esté a punto de agregar y también remite a otro empleado en el sistema, la fila debe agregarse por completo.

ActualEmployee no salva a llamar otra y luego ReferEmployee.Employee = ActualEmployee

entiendo el problema es que tanto los empleados se refieren real y ha puesto de identificación de empleado a 0, pero la forma de entrar en torno a este problema.

Respuesta

18

Suponiendo que el EmployeeID en la tabla de base de datos se define como INT IDENTITY, entonces se podría hacer esto:

// 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(); 

Así que, básicamente, definir sus nuevos empleados con "ficticia" EmployeeID valores y establecer el enlace (Peter referencias John aquí, por medio de su identificación "ficticia").

Al guardar esto en SQL Server, el marco de la entidad manejará el proceso de conseguir los reales EmployeeID valores (que SQL Server manos al insertar la fila) y EF mantendrá esa relación entre los dos empleados.

+1

He estado buscando esta respuesta durante aproximadamente dos horas. Nunca supe que EF funcionaba de esa manera (usando identidades ficticias). ¿Eso está documentado o discutido en algún lado? ¡Gracias! – Mike

+0

@Mike: no estoy seguro - Lo recogí en algún lugar a lo largo de las líneas, leyendo libros, blogs y videos introductorios de Julie Lerman y el equipo de EF –

Cuestiones relacionadas