Entity framework core 删除父行后,如何将子项保留在自引用表中?

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 {

我在自引用表中有一对多关系。从数据库中删除父行后,我希望将子行保留在表中

不幸的是,当我试图删除家长时,我得到的是:

DELETE语句与同一个表引用冲突 约束FK_Libraries_Libraries_TemplateId。冲突发生了 在数据库xxx的表dbo.Libraries中,列“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();