微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决创建表时出错:指定 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);
        }
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。