c# - EF Core - 自引用实体

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

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

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

System.Data.SqlClient.SqlException (0x80131904): Introducing FOREIGN KEY constraint 'FK_Directory_Directory_SubOfId' on table 'Directory' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.

我尝试将 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);

        }

最佳答案

此异常不是由于自引用造成的。当一个实体可以通过多个级联路径删除时,就会出现这种情况。根据您提供的代码,我最好的猜测是 ImageDirectory 发生的事情以及其中的关系实际上是问题的根源。

总而言之,您需要研究您的对象图,以了解删除一种实体类型可能会在何处导致多个级联。然后,您需要关闭其中一些级联才能继续。不幸的是,如果无法看到所有实体以及它们之间的关系,就没有什么可以帮助您的了。

关于c# - EF Core - 自引用实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49131041/

相关文章:

c# - 创建 Controller 基类(部分)

entity-framework - Entity Framework 7 Code First 中的一对一关系

c# - 创建接受从参数类型(多态参数)派生的任何类型的参数的操作

c# - 批量转换 C# 代码以使用 String.Format

c# - 查看不断变化的数据集的聚合的最佳架构选择是什么?

.NET Core 2.0 ASP.NET MVC 下载文件和调用文件保存对话框

asp.net-core - 如何在 VS 2017 中更新 Microsoft.NETCore.App SDK 版本

c# - 如何使 autofac KeyFilter 在 asp.net-core web api 中工作?

c# - 使用多个 DB 架构的 EF Core 迁移

entity-framework-core - 如何在数据库事务中包装使用 TestServer 的集成测试?