我使用实体框架4,我与"级联删除"设置有父子关系.所以当我调用SaveChanges()时,当我从父母中删除孩子时,我会期望删除孩子.
cuRepository.Attach(_controlUnit);
foreach (var recipe in recipes) {
_controlUnit.Recipes.Remove(recipe);
//repository.DeleteObject(recipe);
}
Run Code Online (Sandbox Code Playgroud)
相反,我得到一个错误:
发生System.InvalidOperationException消息=操作失败:无法更改关系,因为一个或多个外键属性不可为空.当对关系进行更改时,相关的外键属性将设置为空值.如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象.
当我明确删除子项(请参阅注释行)时,一切都很好.我错过了什么?
我在Contact和Phone之间有一对多的单向关系,定义如下:
class Contact {
int ContactId {get; set}
ICollection<Phone> Phones {get; set}
}
class Phone {
int PhoneId {get; set;}
string PhoneNumber {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
现在在域层中,我尝试执行以下操作:
someContact.Phones.Remove(somePhone);
Run Code Online (Sandbox Code Playgroud)
当我试图打电话时context.SaveChanges()我得到一个例外,因为这种关系被定义为必需(例如,没有联系人就不能存在电话).
如何在不使用电话中的外键或导航属性的情况下解决此问题,而无需在呼叫DbSet<Phone>.Remove(Phone)前进行呼叫SaveChanges()?