2

我有这个域:

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);

上面你可以看到加载 aPerson和清除它的简单逻辑Phones。但是会出现这个错误:

操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。

实际上我想清除所有Person.Phones并添加一些新项目。但我想在一个查询中清除它们,而不是一一删除。

你有什么想法吗?你能帮我吗?提前致谢。

4

2 回答 2

1

您不能在 EF 中生成基于集合的 SQL。因此,在 EF 中无法生成单个 SQL 语句来删除Phone给定的所有记录Person.Id

您可以自己编写 SQL 并将其传递给ObjectContext.ExecuteStoreCommandDbContext.Database.ExecuteSqlCommand,具体取决于您的模型。

于 2012-05-12T16:22:17.943 回答
0
foreach(var phone in person.Phones)
{
   context.DeleteObject(phone);
}
person.Phones.Clear();

可能会有所帮助。

于 2012-05-12T17:15:27.730 回答