EF Core - 自引用实体

问题描述 投票:1回答:1

我有一个表应该引用同一个表。但是当我尝试更新数据库架构时,它会抛出这个错误:

当我尝试更新架构时,PMC抛出此错误:

System.Data.SqlClient.SqlException(0x80131904):在表'Directory'上引入FOREIGN KEY约束'FK_Directory_Directory_SubOfId'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。

我尝试将ON DELETE设置为CASCADE但没有,仍然是相同的错误。我不知道如何设置NO ACTION,因为映射不提供此选项。

怎么样?

实体:

public class Directory : BaseEntity
{
    public int ID { get; set; }

    public int? SubOfId { get; set; }

    [ForeignKey("SubOfId")]
    public Directory SubOf { get; set; }

    public virtual ICollection<ImageDirectory> ImageDirectory { get; set; }
}

模型构建器:

 protected override void OnModelCreating(ModelBuilder builder)
        {

            base.OnModelCreating(builder);

...

            builder.Entity<Directory>().HasOne(e => e.SubOf).WithOne().HasForeignKey<Directory>(a => a.SubOfId).OnDelete(DeleteBehavior.Cascade);

        }
c# asp.net-core entity-framework-core
1个回答
2
投票

此异常不是由于自引用。当可以通过多个级联路径删除实体时,可以获得此信息。根据你提供的代码,我最好的猜测是,ImageDirectory和游戏中的关系正在发生的事实上是问题的根源。

无论长短,您需要调查对象图以查看删除一个实体类型可能导致多个级联的位置。然后,您需要关闭其中一些级联才能继续。不幸的是,没有更多的东西可以帮助你,但却无法看到你所有的实体以及它们之间的关系。

© www.soinside.com 2019 - 2024. All rights reserved.