就像标题一样,EF 6不想删除表中的行(多对多关系)。
表格是:
组织
OrganizationContact(多对多)
ContactType
这是代码:
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()的日志显示没有对数据库的查询。
答案 0 :(得分:4)
using (var db = new FIXEntities())
{
db.Database.Log = x => Debug.WriteLine(x);
var organizationDto = db.Organizations.First();
var contactDto = organizationDto.Contacts.Last();
//organizationDto.Contacts.Remove(contactDto); // not necessary
db.Entry(contactDto).State = EntityState.Deleted;
// or, like this if you prefer
db.Set<OrganizationContact>().Remove(contactDto);
db.SaveChanges();
}
仅从集合属性中删除它是不够的,您必须将其删除。由于你的多对多有自己的主键,EF不知道你想要删除它,它只是认为你想要它解除关联。因此,您必须删除它才能满足EF在异常中抱怨的FK关系。