繁体   English   中英

删除一对多关系中的相关实体

[英]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.ExecuteStoreCommandDbContext.Database.ExecuteSqlCommand

foreach(var phone in person.Phones)
{
   context.DeleteObject(phone);
}
person.Phones.Clear();

可能会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM