首页 > 解决方案 > EF Core - 具有自定义列名的同一个表的外键和覆盖的 onDelete 行为

问题描述

我有一个实体“用户”,用户可以在其中担任多个角色。所以一个这样的角色是 LineManager,我通过检查 LineManagerId(这是用户的 ID)来跟踪是否为任何用户分配了 LineManager,这里是用户实体:

public class User
{
    public Guid ID { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    [ForeignKey("LineManager")]
    public Guid? LineManagerId { get; set; }

    public virtual User LineManager { get; set; }
}

应用更改并在生成默认迁移的数据库中正常创建外键。但这是我的问题,当我覆盖默认迁移并将 onDelete 设置为 null 时,如下所示(在 OnModelCreating 方法上):

modelBuilder.Entity<User>().HasOne(u => u.LineManager)
.WithMany()
.HasForeignKey(e => e.LineManagerId)
.OnDelete(DeleteBehavior.SetNull);

应用迁移/更新数据库时出现以下错误:

在表 'Users' 上引入 FOREIGN KEY 约束 'FK_Users_Users_LineManagerId' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。无法创建约束或索引。查看以前的错误

任何帮助深表感谢。

标签: c#sqlentity-framework-coreef-fluent-api

解决方案


推荐阅读