0

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

  • Persons (ID-NAME)例如(1-保罗 - 2-弗兰克 - 3-乔治)

  • Roles (ID-NAME)例如(1-Admin - 2-Developer - 3-Junior)

  • Persons_Roles (ID_PERSON Not Null- ID_ROLE Not Null 例如 (1-1 - 1-2 - 2-3 - 2-1 - 3-2)

表在和表Persons_Roles上都有一个外键。PersonsRoles

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

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();

但我得到这个错误

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

为什么我会收到此错误,我该怎么做才能修复它?

4

2 回答 2

1

如果你想删除一个规则,你必须首先删除所有引用该规则的记录。例如,必须先清除 Person_Roles 表中的所有记录,然后从 Role Table 中删除规则

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();
于 2019-07-11T04:21:52.623 回答
0

如果将另一个表作为外键引用,则无法删除数据,但您已完成

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

于 2019-07-11T03:24:40.267 回答