Я хотел бы добавить 4-е решение в дополнение к 3-м решениям, уже представленным в Ладиславе. Отличный ответ.На самом деле это подробный вариант краткого ответа от Наора.Я работаю с платформой сущности версии 6.
Назначить идентификатор отдела сотруднику вместо объекта отдела
Я склонен ку меня есть свойство "значение внешнего ключа" в дополнение к свойству навигации в моих классах модели.
Так что в классе Employee
у меня есть свойство Department
и также DepartmentId
типа int (makeint nullable, если возможно, что Employee
не имеет 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
}
Вы могли бы сделать это сейчас, просто установив DepartmentId
: Итак, вместо:
employee.Department = departmentObject;
просто установить:
employee.DepartmentId = departmentObject.Id;
или
employee.DepartmentId = departmentid
Теперь при вызове SaveChanges
для добавленного сотрудника сохраняется только сотрудник, и новый отдел не создается.Но ссылка от Employee
до Department
установлена правильно из-за назначенного идентификатора отдела.
Подробнее
Обычно я получаю доступ к объекту Department
класса Employee
только при чтении / обработке сотрудников.При создании или обновлении сотрудников я бы использовал свойство DepartmentId
класса Employee
для назначения.
Не присваивание свойству Department
Employee
имеет один недостаток:отладка сложнее, потому что перед вызовом SaveChanges
и повторным чтением сотрудников было бы невозможно увидеть или использовать Department
объект Employee
.
Исправление информации о состоянии объекта в EF6
Это относится к решению Ladislavs номер 3.
С EF6 это делается следующим образом:
_context.Entry(employee.Department).State = EntityState.Unchanged;