Entity framework 实体框架代码第一个成员资格提供程序关系问题

Entity framework 实体框架代码第一个成员资格提供程序关系问题,entity-framework,ef-code-first,asp.net-membership,Entity Framework,Ef Code First,Asp.net Membership,我试图先在asp.net成员资格提供程序上编写代码。当代码第一次创建表时,它会生成所有表和到桥接表的适当关系,但它也会创建一个从AspNet_用户(一个)到AspNet_角色(多个)的附加关系。你知道它为什么这么做吗?用户和角色表之间不应该有任何关系 public class Aspnet_Role { public Aspnet_Role() { Aspnet_Users = new HashSet<Aspnet_Users>(); }

我试图先在asp.net成员资格提供程序上编写代码。当代码第一次创建表时,它会生成所有表和到桥接表的适当关系,但它也会创建一个从AspNet_用户(一个)到AspNet_角色(多个)的附加关系。你知道它为什么这么做吗?用户和角色表之间不应该有任何关系

public class Aspnet_Role
{
    public Aspnet_Role()
    {
        Aspnet_Users = new HashSet<Aspnet_Users>();
    }
    [Key]
    public Guid RoleId { get; set; }
    public string RoleName { get; set; }
    public string LoweredRoleName { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Aspnet_Users> Aspnet_Users { get; set; }
}
public class Aspnet_Users
{
    public Aspnet_Users()
    {
        Aspnet_Roles = new HashSet<Aspnet_Role>();
    }
    [Key]
    public Guid UserId { get; set; }
    public string UserName { get; set; }
    public string LoweredUserName { get; set; }
    public string MobileAlias { get; set; }
    public bool IsAnonymous { get; set; }
    public DateTime LastActivityDate { get; set; }

    public virtual Aspnet_Membership Aspnet_Membership { get; set; }
    public virtual ICollection<Aspnet_Role> Aspnet_Roles { get; set; }
}
public class StagingContext : DbContext
{
    public DbSet<Aspnet_Role> Aspnet_Roles { get; set; }
    public DbSet<Aspnet_Users> Aspnet_Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)

    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Aspnet_Users>()
            .HasMany(r => r.Aspnet_Roles)
            .WithMany()
            .Map(m => m.ToTable("aspnet_UsersInRoles")
                .MapRightKey("RoleId")
                .MapLeftKey("UserId"));

    }
}
公共类Aspnet\u角色
{
公共Aspnet_角色()
{
Aspnet_Users=new HashSet();
}
[关键]
公共Guid RoleId{get;set;}
公共字符串RoleName{get;set;}
公共字符串LowereRoleName{get;set;}
公共字符串说明{get;set;}
公共虚拟ICollection Aspnet_用户{get;set;}
}
公共类Aspnet_用户
{
公共Aspnet_用户()
{
Aspnet_Roles=new HashSet();
}
[关键]
公共Guid用户标识{get;set;}
公共字符串用户名{get;set;}
公共字符串LoweredUserName{get;set;}
公共字符串MobileAlias{get;set;}
公共布尔是非对称的{get;set;}
公共日期时间LastActivityDate{get;set;}
公共虚拟Aspnet_成员身份Aspnet_成员身份{get;set;}
公共虚拟ICollection Aspnet_角色{get;set;}
}
公共类StagingContext:DbContext
{
公共DbSet Aspnet_角色{get;set;}
公共数据库集Aspnet_用户{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(r=>r.Aspnet_角色)
.有很多
.Map(m=>m.ToTable(“aspnet\u UsersInRoles”)
.MapRightKey(“RoleId”)
.MapLeftKey(“用户ID”);
}
}

我在WithMany扩展上添加了导航属性

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{
    base.OnModelCreating(modelBuilder);

     modelBuilder.Entity<Aspnet_Users>()
         .HasMany(r => r.Aspnet_Roles)
         .WithMany(u => u.Aspnet_Users)
         .Map(m => m.ToTable("aspnet_UsersInRoles")
         .MapRightKey("RoleId")
          .MapLeftKey("UserId")); 

}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(r=>r.Aspnet_角色)
.WithMany(u=>u.Aspnet\u用户)
.Map(m=>m.ToTable(“aspnet\u UsersInRoles”)
.MapRightKey(“RoleId”)
.MapLeftKey(“用户ID”);
}

为什么用户与其角色之间不应该存在关系?这种关系应该只在桥接表上,而不在父表上。它(aspnet_用户)与(aspnet_userinroles)有一对多关系,而(aspnet_角色)与aspnet_userinroles有一对多关系。但实体创建另一个关系,即aspnet_用户与aspnet_角色之间的关系,我不希望这样。