创建表时出错:指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束

问题描述

我收到此错误

引入 FOREIGN KEY 约束可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

我的代码有什么问题?

    public class AppUserMap : IEntityTypeConfiguration<AppUser>
    {
        public void Configure(EntityTypeBuilder<AppUser> builder)
        {
            builder.Property(m => m.Name).HasMaxLength(50).Isrequired(true);
            builder.HasMany(m => m.Essays).WithOne(m => m.AppUser).HasForeignKey(m => m.AppUserId);
        }
    }
    public class AppRoleMap : IEntityTypeConfiguration<AppRole>
    {
        public void Configure(EntityTypeBuilder<AppRole> builder)
        {
            builder.HasKey(m => m.Id);
            builder.HasMany(m => m.AppUsers).WithOne(m => m.AppRole).HasForeignKey(m => m.AppRoleId).OnDelete(DeleteBehavior.NoAction);
        }
    }
    public class AppRole : IdentityRole<int>,ITable
    {
        public List<AppUser> AppUsers { get; set; }
    }
    public class AppUser : IdentityUser<int>,ITable
    {
        public string Name { get; set; }
        public string Picture { get; set; } = "default.png";
        #nullable enable
        public string? AppUserRole { get; set; }
        #nullable disable
        public bool Ban { get; set; } = false;

        public List<Essay> Essays { get; set; }

        public AppRole AppRole { get; set; }
        public int AppRoleId { get; set; }
    }

解决方法

感谢您的回答。我通过更改代码中的一些内容解决了这个问题。

这是我的解决方案代码(您可以看到更改):

public class AppUser : IdentityUser<int>,ITable
    {
        public string Name { get; set; }
        public string Picture { get; set; } = "default.png";
        public bool Ban { get; set; } = false;

        public List<Essay> Essays { get; set; }

#nullable enable
        public AppRole? AppRole { get; set; }
        public int? AppRoleId { get; set; }
#nullable disable
    }


public class AppRoleMap : IEntityTypeConfiguration<AppRole>
    {
        public void Configure(EntityTypeBuilder<AppRole> builder)
        {
            builder.HasKey(m => m.Id);
            builder.HasMany(m => m.AppUsers).WithOne(m => m.AppRole).HasForeignKey(m => m.AppRoleId).OnDelete(DeleteBehavior.SetNull);
        }
    }