EF Core 1.1多对多关系(ON DELETE NO ACTION或ON UPDATE NO ACTION)

Man*_*ons 5 .net c# entity-framework-core

我正在尝试创建一个具有多对多关系的模型:

  • 一个公司可以有0个或更多用户

  • 一个公司可以有0个或更多角色

  • 多对多关系是用户和角色之间的关系

每次尝试创建数据库(更新数据库)时,都会显示以下消息:

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

我不明白它指的是什么周期。我的意思是,如果删除用户,则必须删除UsersRoles内的实体,仅此而已。如果删除角色也是如此。

如果我的模型只有“用户和角色”,而没有“公司”表,那么将创建数据库。

我究竟做错了什么?

public class MyContext : DbContext
{
    public DbSet<Company> Companies { get; set; }
    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer("Server = (localdb)\\mssqllocaldb; Database = ConsoleApp1; Trusted_Connection = True; MultipleActiveResultSets = true");

        base.OnConfiguring(optionsBuilder);
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<UserRole>()
            .ToTable("UsersRoles")
            .HasKey(t => new { t.UserId, t.RoleId });

        modelBuilder.Entity<UserRole>()
            .HasOne(pt => pt.User)
            .WithMany(p => p.UsersRoles)
            .HasForeignKey(pt => pt.UserId);

        modelBuilder.Entity<UserRole>()
            .HasOne(pt => pt.Role)
            .WithMany(t => t.UsersRoles)
            .HasForeignKey(pt => pt.RoleId);

        base.OnModelCreating(modelBuilder);
    }
}

public class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
    public ICollection<User> Users { get; set; }
    public ICollection<Role> Roles { get; set; }
}

public class User
{
    public int Id { get; set; }
    public string Surname { get; set; }
    public int CompanyId { get; set; }
    public Company Company { get; set; }
    public ICollection<UserRole> UsersRoles { get; set; }
}

public class Role
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int CompanyId { get; set; }
    public Company Company { get; set; }
    public ICollection<UserRole> UsersRoles { get; set; }
}

public class UserRole
{
    public int UserId { get; set; }
    public User User { get; set; }
    public int RoleId { get; set; }
    public Role Role { get; set; }
}
Run Code Online (Sandbox Code Playgroud)