EF Core - 自引用实体

时间:2018-03-06 12:37:29

标签: c# asp.net-core entity-framework-core

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

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

  

System.Data.SqlClient.SqlException(0x80131904):FOREIGN简介   表'目录'上的键约束'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);

        }

1 个答案:

答案 0 :(得分:2)

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

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