C# 实体框架用户角色一对一关系而不是多对多关系

C# 实体框架用户角色一对一关系而不是多对多关系,c#,asp.net-mvc-4,ef-code-first,asp.net-identity,C#,Asp.net Mvc 4,Ef Code First,Asp.net Identity,默认情况下,Asp.Net在表AspNetUsers、AspNetRoles、AspNetUserRoles之间提供多对多关系。在这里,我想将AspNetUsers和AspNetRoles之间的关系从(多对多)更改为(一对一),然后首先使用实体框架代码删除AspNetUserRoles 我尝试使用以下代码,但它表示错误。元数据集合中已存在标识为“ApplicationRole\u Users”的项。 参数名称:项目 我首先使用实体框架代码 public class ApplicationUser

默认情况下,Asp.Net在表AspNetUsers、AspNetRoles、AspNetUserRoles之间提供多对多关系。在这里,我想将AspNetUsers和AspNetRoles之间的关系从
(多对多)
更改为
(一对一)
,然后首先使用实体框架代码删除AspNetUserRoles

我尝试使用以下代码,但它表示错误。
元数据集合中已存在标识为“ApplicationRole\u Users”的项。
参数名称:项目

我首先使用实体框架代码

public class ApplicationUser : IdentityUser
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [Required]
    [EmailAddress]
   new public string Email { get; set; }

    [Required]
    public string RoleId { get; set; }

    [ForeignKey("RoleId")]
    public virtual ApplicationRole ApplicationRoles { get; set; }
}
下面是应用程序角色模型

public class ApplicationRole : IdentityRole
{
    public ApplicationRole() : base() { }


    public ApplicationRole(string name, string description) : base(name)
    {
        this.Description = description;
    }
    public virtual string Description { get; set; }

    public virtual ICollection<ApplicationUser> Users { get; set; }

}
公共类应用程序角色:IdentityRole
{
公共应用程序角色():基(){}
公共应用程序角色(字符串名称、字符串描述):基本(名称)
{
这个。描述=描述;
}
公共虚拟字符串描述{get;set;}
公共虚拟ICollection用户{get;set;}
}
这是我的ApplicationDBContext类

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{        
    //public virtual IDbSet<ApplicationUser> Users { get; set; }
    public virtual IDbSet<ApplicationRole> ApplicationRoles { get; set; }
    public virtual IDbSet<Group> Groups { get; set; }
    public virtual IDbSet<UserGroup> UserGroups { get; set; }

    public ApplicationDbContext(): base("PHELeadContext")
    {}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        if (modelBuilder == null)
        {
            throw new ArgumentNullException("modelBuilder");
        }


        modelBuilder.Entity<IdentityUser>().ToTable("AspNetUsers");

        EntityTypeConfiguration<ApplicationUser> table =
            modelBuilder.Entity<ApplicationUser>().ToTable("AspNetUsers");

        table.Property((ApplicationUser u) => u.UserName).IsRequired();

        modelBuilder.Entity<ApplicationRole>().HasMany<ApplicationUser>((ApplicationRole u) => u.Users);            

        EntityTypeConfiguration<IdentityUserLogin> entityTypeConfiguration =
            modelBuilder.Entity<IdentityUserLogin>().HasKey((IdentityUserLogin l) =>
                new { UserId = l.UserId, LoginProvider = l.LoginProvider, ProviderKey = l.ProviderKey }).ToTable("AspNetUserLogins");

        EntityTypeConfiguration<IdentityUserClaim> table1 = modelBuilder.Entity<IdentityUserClaim>().ToTable("AspNetUserClaims");

        modelBuilder.Entity<IdentityRole>().ToTable("AspNetRoles");

        // Change these from IdentityRole to ApplicationRole:
        EntityTypeConfiguration<ApplicationRole> entityTypeConfiguration1 = modelBuilder.Entity<ApplicationRole>().ToTable("AspNetRoles");
        entityTypeConfiguration1.Property((ApplicationRole r) => r.Name).IsRequired();
    }
}
public类ApplicationDbContext:IdentityDbContext
{        
//公共虚拟IDbSet用户{get;set;}
公共虚拟IDbSet应用程序角色{get;set;}
公共虚拟IDbSet组{get;set;}
公共虚拟IDbSet用户组{get;set;}
public ApplicationDbContext():base(“PHELeadContext”)
{}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
if(modelBuilder==null)
{
抛出新的ArgumentNullException(“modelBuilder”);
}
modelBuilder.Entity().ToTable(“AspNetUsers”);
EntityTypeConfiguration表=
modelBuilder.Entity().ToTable(“AspNetUsers”);
table.Property((ApplicationUser u)=>u.UserName).IsRequired();
modelBuilder.Entity()有许多((应用程序角色u)=>u.Users);
EntityTypeConfiguration EntityTypeConfiguration=
modelBuilder.Entity().HasKey((IdentityUserLogin l)=>
新的{UserId=l.UserId,LoginProvider=l.LoginProvider,ProviderKey=l.ProviderKey});
EntityTypeConfiguration table1=modelBuilder.Entity().ToTable(“AspNetUserClaims”);
modelBuilder.Entity().ToTable(“AspNetRoles”);
//将这些从IdentityRole更改为ApplicationRole:
EntityTypeConfiguration entityTypeConfiguration1=modelBuilder.Entity().ToTable(“AspNetRoles”);
entityTypeConfiguration1.Property((ApplicationRole r)=>r.Name.IsRequired();
}
}
我的问题是。。是否可以为
AspNetUsers
AspNetRoles
AspNetUserRole
更改Asp.Net元表之间的关系