在我的模型中,我有类似的表格:
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();
但我收到此错误
操作失败:由于一个或多个外键属性不可为空,因此无法更改关系。对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
为什么会出现此错误,我该怎么解决?
答案 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)
如果数据作为外键引用到另一个表,则无法删除,但是您已通过
完成了操作从引用表中删除值之后,您将只能执行删除操作