У меня есть модель Личность и модель Команда. Команда имеет FK для Лица с нулевым TeamleaderId для Person.PersonId и виртуального Лица Teamleader {get; set;}.Ссылочная целостность Нарушение Constraint при обновлении FK
Есть несколько команд, некоторые из которых имеют командующий, а некоторые нет. Теперь я пытаюсь изменить свойство teamleader другому руководителю команды. В SaveChanges я получаю это исключение: «Нарушение ограничения ссылочной целостности произошло: значения (-ы) свойства« Personal.PersonalId »на одном конце отношения не соответствуют значениям свойств« Team.TeamleaderId »on другой конец ».
Teamleader и TeamleaderId соответствуют друг другу, даже сброс идентификатора команды на нуль не работает.
Когда я впервые установил командующий в команде без лидера, все работает. Изменение состава команды больше не работает.
Что я делаю неправильно?
С наилучшими пожеланиями, Mate
EDIT:
Вот модели:
public class Person
{
[Key]
public long PersonId { get; set; }
// some other...
// optional: List of Teams
}
public class Team
{
[Key]
public long TeamId { get; set; }
// some other...
public long? TeamleaderId { get; set; }
[ForeignKey("TeamleaderId")]
public virtual Person Teamleader { get; set; }
}
Я до сих пор делают некоторые исследования и вернуться ...
Wow! И теперь для некоторых очень странных:
Если я запрашиваю состояние объекта в окне просмотра, состояние «Модифицировано», и запись сохраняется правильно. Если я не запрашиваю состояние объекта, состояние «Без изменений», когда запись приходит в SaveChanges, и ничего не происходит. В данный момент значение AutoDetectChangesEnabled истинно.
Что, черт возьми, это?
Вы изменения 'TeamLeader' свойство или' свойство TeamLeaderId'? Также будет хорошо, если вы разместите образец модели и код, который воспроизводит проблему (т. Е. [Mcve]) –
у вас есть ChangeTracking включен? Вы загружаете Teamleader после извлечения? Правильно ли заданы состояния// id в базе данных? – DevilSuichiro
Я изменяю свойство TeamLeaderId. Свойство навигации имеет значение null. Мы переключили AutoDetectChanges на false, так как это был плохой убийца производительности. Но это, похоже, приводит к решению. В большинстве случаев установка AutoDetectChanges на false работает. Но в этом конкретном случае мы сталкиваемся с проблемами. Я вернусь с дополнительной информацией ... – Mate