就像 Headers 一样,EF 6不想删除表中的行(多对多关系) .
表是:
组织
-
Id(int主键)
-
姓名(字符串)
OrganizationContact(多对多)
-
Id(int主键)
-
OrganizationId(Organization.Id的外键不可为空)
-
ContactTypeId(ContactType.Id的外键不可为空)
-
详细信息(String)
ContactType
-
Id(int主键)
-
名称(字符串可为空)
这是代码:
using (var db = new Entities())
{
db.Database.Log = x => Debug.WriteLine(x);
var organizationDto = db.Organizations.First();
var contactDto = organizationDto.Contacts.Last();
organizationDto.Contacts.Remove(contactDto);
db.SaveChanges();
}
这是例外:
EntityFramework.dll中出现“System.InvalidOperationException”类型的异常,但未在用户代码中处理
附加信息:操作失败:无法更改关系,因为一个或多个外键属性不可为空 . 当对关系进行更改时,相关的外键属性将设置为空值 . 如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象 .
我会很感激任何建议 . 谢谢!
编辑:db.SaveChanges()的日志显示没有对数据库的查询 .
1 回答
仅从集合属性中删除它是不够的,您必须将其删除 . 由于你的多对多有自己的主键,EF不知道你想要删除它,它只是认为你想要它解除关联 . 因此,您必须删除它才能满足EF在异常中抱怨的FK关系 .