[英]deleting related entities in a one-to-many relationship
我有这个域名:
public class Phone {
public int Id { get; set; }
public string Number { get; set; }
public Person Person { get; set; }
}
public class Person {
public int Id { get; set; }
public IList<Phone> Phones { get; set; }
}
我加载一个Person
并清除其Phones
。 但是该操作导致错误:
// actually loads person from repository...
var person = _personRepository.Include(p => p.Phones).Where(p => p.Id == 1).First();
person.Phones.Clear();
_personRepository.Update(person);
在上方,您可以看到加载Person
并清除其Phones
的简单逻辑。 但是会发生此错误:
操作失败:由于一个或多个外键属性不可为空,因此无法更改该关系。 对关系进行更改时,相关的外键属性将设置为空值。 如果外键不支持空值,则必须定义新的关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
实际上,我想清除所有Person.Phones
并添加一些新项目。 但是我想在一个查询中清除它们,而不是一个一个地删除它们。
你有什么主意吗 你能帮我吗? 提前致谢。
您无法在EF中生成基于集合的SQL。 因此,EF中无法生成单个SQL语句来删除给定Person.Id
所有Phone
记录。
您可以自己编写SQL, 然后根据模型将其传递给ObjectContext.ExecuteStoreCommand或DbContext.Database.ExecuteSqlCommand 。
foreach(var phone in person.Phones)
{
context.DeleteObject(phone);
}
person.Phones.Clear();
可能会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.