Entity framework core 删除父行后,如何将子项保留在自引用表中?
我在自引用表中有一对多关系。从数据库中删除父行后,我希望将子行保留在表中 不幸的是,当我试图删除家长时,我得到的是: DELETE语句与同一个表引用冲突 约束FK_Libraries_Libraries_TemplateId。冲突发生了 在数据库xxx的表dbo.Libraries中,列“TemplateId” 以下是我的配置:Entity framework core 删除父行后,如何将子项保留在自引用表中?,entity-framework-core,Entity Framework Core,我在自引用表中有一对多关系。从数据库中删除父行后,我希望将子行保留在表中 不幸的是,当我试图删除家长时,我得到的是: DELETE语句与同一个表引用冲突 约束FK_Libraries_Libraries_TemplateId。冲突发生了 在数据库xxx的表dbo.Libraries中,列“TemplateId” 以下是我的配置: public class Library { public int Id { get; set; } public int? TemplateId {
public class Library
{
public int Id { get; set; }
public int? TemplateId { get; set; }
public virtual Library Template { get; set; }
public virtual ICollection<Library> Libraries { get; set; }
}
我认为您应该在删除父项之前将子项的TemplateId设置为null
parent.Libraries.Clear();
context.SaveChanges();
应该消除这种关系。然后可以删除父级。这些子项不会被删除
原因:TemplateId是指向库的外键。它加强了一致性。它不允许您将TemplateId指向不存在的库父级。因此,必须先解除子项与父项的关联,然后才能删除父项
parent.Libraries.Clear();
context.SaveChanges();