Me gustaría agregar una cuarta solución además de las 3 soluciones ya incluidas en la gran respuesta de Ladislavs. En hechos, es una versión detallada de la respuesta corta de Naor. Estoy trabajando con la versión de Entity Framework 6.
asignar la identificación deparment de que el empleado en lugar de objeto departamento de
que tienden a tener una propiedad "valor de clave externa", además de la propiedad de navegación en mis clases modelo.
Así que en la clase Employee
Tengo un Department
propiedad y también un DepartmentId
de tipo int (Hacer la int anulable si es posible que un Employee
no tiene Department
):
public class Employee
{
public int Id { get; set; }
public String EmployeeName { get; set; }
#region FK properties
public Department Department { get; set; }
public int? DepartmentId { get; set; }
#endregion
}
¿Le podría hacer ahora es sólo la creación de la DepartmentId
: Así que en lugar de:
employee.Department = departmentObject;
acaba de establecer:
employee.DepartmentId = departmentObject.Id;
o
employee.DepartmentId = departmentid
Ahora al llamar SaveChanges
en el empleado añadido, sólo el empleado se guarda y se crea ningún nuevo departamento. Pero la referencia de Employee
a Department
se establece correctamente debido a la identificación del departamento asignada.
Más información
por lo general iba a tener acceso a la Department
objeto de la clase Employee
sólo cuando leo/empleados de procesamiento. Al crear o actualizar empleados, utilizaría la propiedad DepartmentId
de la clase Employee
para asignar.
no asignar a la propiedad Department
del Employee
tiene un inconveniente: Se podría hacer una depuración más difícil, porque antes de llamar SaveChanges
y volver a leer los empleados que no sería posible ver o utilizar el Department
objeto de la Employee
. Datos de estado de entidad
fijación en EF6
Esto se refiere al número Ladislavs solución 3.
Con EF6 se hace de esa manera:
_context.Entry(employee.Department).State = EntityState.Unchanged;
Cuál es el ¿excepción de clave principal? Es posible que no tenga la propiedad de la clave principal del modelo 'StoreGeneratedPattern' establecida en' Identity'. Si este no es el caso, ¿podría proporcionar algunas muestras de código para ver? – philt5252