EF无法删除对象

时间:2019-07-10 22:12:34

标签: c# entity-framework-6 db-first

在我的模型中,我有类似的表格:

  • 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_RolesPersonsRoles表上都具有外键。

我需要删除一个角色。我实际上是

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 个答案:

答案 0 :(得分:2)

如果要删除规则,则必须首先删除所有引用到该规则的记录。 例如,您必须首先清除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();

答案 1 :(得分:0)

如果数据作为外键引用到另一个表,则无法删除,但是您已通过

完成了操作

从引用表中删除值之后,您将只能执行删除操作