与Code First的单向一对多关系

Ibr*_*jar 7 .net c# ado.net entity-framework ef-code-first

我在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()

Mat*_*hew 1

您基本上回答了自己的问题,因为您描述的两件事是分开的:

  1. 取消对象的链接
  2. 删除对象

EF 可能有一种聪明的方法来做到这一点,但其他人也提出了同样的问题,并得到了您提到的答案:

例如EF 4.1:从集合中删除子对象并不会删除它 - 为什么?