EF Не удается удалить объект - PullRequest
0 голосов
/ 11 июля 2019

В моей модели у меня есть похожие таблицы:

  • Persons (ID-NAME) например (1-Пол - 2-Фрэнк - 3-Джордж)

  • Roles (ID-NAME) например (1-админ - 2-разработчик - 3-младший)

  • Persons_Roles (ID_PERSON Not Null - ID_ROLE не нулевой, например (1-1 - 1-2 - 2-3 - 2-1 - 3-2)

Таблица Persons_Roles имеет внешний ключ для таблиц Persons и Roles.

Мне нужно удалить роль. Я на самом деле

Persons oP = DbContext.Persons.Single(p=>p.ID == 1);
Persons_Roles oR = oP.Persons_Roles.Single(p=>p.ID_ROLE == 2);
oP.Persons_Roles.Remove(oR);
DbContext.SaveChanges();

Но я получаю эту ошибку

Операция завершилась неудачно: отношение не может быть изменено, поскольку одно или несколько свойств внешнего ключа не могут быть равны нулю. Когда в отношение вносится изменение, для соответствующего свойства внешнего ключа устанавливается нулевое значение. Если внешний ключ не поддерживает нулевые значения, необходимо определить новое отношение, свойству внешнего ключа должно быть присвоено другое ненулевое значение или несвязанный объект должен быть удален.

Почему я получаю эту ошибку и что мне делать, чтобы ее исправить?

Ответы [ 2 ]

2 голосов
/ 11 июля 2019

Если вы хотите удалить правило, вы должны сначала удалить все записи, которые ссылаются на это правило.Например, сначала необходимо очистить все записи в таблице Person_Roles, а затем удалить правило из таблицы ролей

var personRoles = DbContext.Persons_Roles.Where(p=>p.ID_ROLE == 2).ToList();
DbContext.Persons_Roles.RemoveRange(personRoles);
var role = DbContect.Roles.Single(a=>a.ID==2);
DbContext.Roles.Remove(role);
DbContext.SaveChanges();
0 голосов
/ 11 июля 2019

Вы не можете удалить данные, если они ссылаются на другую таблицу как внешний ключ, но вы сделали через

Удалить значение из ссылочной таблицы, после чего вы сможете выполнить только операцию удаления

...