删除父行后,如何将子行保留在自引用表中



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

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

DELETE语句与SAME TABLE REFERENCE冲突约束"FK_Librares_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; }
}

以下是我尝试为行为建模的方法:

builder.HasMany(library => library.Libraries).WithOne(library => library.Template)
.HasForeignKey(library => library.TemplateId).IsRequired(false).OnDelete(DeleteBehavior.Restrict);

我认为在删除父级之前,应该将子级的TemplateId设置为null。

parent.Libraries.Clear();
context.SaveChanges();

应该删除关系。然后可以删除父对象。孩子们不会被删除。

原因:TemplateId是指向库的外键。它加强了一致性。它不允许TemplateId指向不存在的库(父级(。因此,在删除父对象之前,必须先解除子对象与父对象的关联。

最新更新