我想对父子,自引用关系模型执行级联删除。
已将模型(模型A)配置为具有父子关系,自指关系,这种关系相当于树形结构。模型A可以由模型B引用,模型B创建一对多关系。当我删除模型A的实例时,我想删除模型B,以及所有在模型A下的子级联删除。我想配置模型或fluent-api来实现这种行为,但是遇到一个异常,
“未处理的异常:System.Data.SqlClient.SqlException:在表'SecuredEntity'上引入FOREIGN KEY约束'FK_SecuredEntity_SecuredEntity_ParentUid'可能会导致循环或多个级联路径。请指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN关键约束。”
当我尝试将脚本应用于数据库时。我该如何解决并获得所需的行为?下面是该代码的基本概述。
[Table(nameof(ModelA))]
public class ModelA : BaseModel // Has Id and Uid
{
public Guid? ParentUid { get; set; }
public ModelA Parent { get; set; }
public ICollection<ModelA> Children { get; set; }
public ICollection<ModelB> OtherModels { get; set; }
}
[Table(nameof(ModelB))]
public class ModelB : BaseModel
{
[Required]
public ModelB ModelBInstance { get; set; }
public Guid ModelBUid { get; set; }
}
// From OnModelCreating method
modelBuilder.Entity<ModelB>()
.HasOne(mb => mb.ModelBInstance)
.WithMany(ma => ma.OtherModels)
.HasForeignKey(mb => mb.ModelBUid)
.HasPrincipalKey(ma => ma.UId);
modelBuilder.Entity<ModelA>()
.HasOne(ma => ma.Parent)
.WithMany(ma => ma.Children)
.HasForeignKey(ma => ma.ParentUid)
.HasPrincipalKey(ma => ma.UId)
.OnDelete(DeleteBehavior.Cascade);