Entity Framework 6 CF:删除一对多
Entity Framework 6 CF: Remove One-to-Many
我的 类 是这样的:
public class Contact
{
public string Name { get; set; }
public virtual ICollection<Person> Persons { get; set; }
[Key]
public int Id { get; set; }
}
public class Person
{
public string Name { get; set; }
public virtual Contact Contact { get; set; }
public int? ContactId { get; set; }
[Key]
public int Id { get; set; }
}
当我尝试删除集合中包含 Person
的 Contact
时,出现此错误:
The primary key value cannot be deleted because references to this key
still exist. [ Foreign key constraint name =
FK_dbo.Persons_dbo.Contacts_ContactsId ]
我将 ContactId
设置为 int?
所以它可以为空,数据库说它是一个可以为空的 FK,并且它通常工作正常。就在我尝试删除包含我收到此错误的集合的实体时。
我想删除一个联系人,但不删除其中的人,我该怎么办?
EF 的默认行为是在删除外键的主要关系时将外键设为空。但是,不会设置任何数据库规则。为了让 EF 对依赖项的外键发出更新语句,需要将它们加载到上下文中。
因此,请确保当您删除 Contact
所有依赖的 Person
实体时已加载。
我的 类 是这样的:
public class Contact
{
public string Name { get; set; }
public virtual ICollection<Person> Persons { get; set; }
[Key]
public int Id { get; set; }
}
public class Person
{
public string Name { get; set; }
public virtual Contact Contact { get; set; }
public int? ContactId { get; set; }
[Key]
public int Id { get; set; }
}
当我尝试删除集合中包含 Person
的 Contact
时,出现此错误:
The primary key value cannot be deleted because references to this key still exist. [ Foreign key constraint name = FK_dbo.Persons_dbo.Contacts_ContactsId ]
我将 ContactId
设置为 int?
所以它可以为空,数据库说它是一个可以为空的 FK,并且它通常工作正常。就在我尝试删除包含我收到此错误的集合的实体时。
我想删除一个联系人,但不删除其中的人,我该怎么办?
EF 的默认行为是在删除外键的主要关系时将外键设为空。但是,不会设置任何数据库规则。为了让 EF 对依赖项的外键发出更新语句,需要将它们加载到上下文中。
因此,请确保当您删除 Contact
所有依赖的 Person
实体时已加载。