默认情况下,Asp.Net提供表AspNetUsers,AspNetRoles,AspNetUserRoles之间的多对多关系。在这里,我想在AspNetUsers和AspNetRoles之间将这些关系从(Many-to-Many)
更改为(One-to-One)
,然后才想使用Entity Framework Code First删除AspNetUserRoles。
我尝试使用以下代码,但它代表错误。The item with identity 'ApplicationRole_Users' already exists in the metadata collection.
Parameter name: item
我正在使用Entity Framework Code First
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; }
}
这是ApplicationRole模型
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; }
}
这是我的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();
}
}
我的问题是..是否可以更改Asp.Net的元表之间的关系AspNetUsers
,AspNetRoles
,AspNetUserRole
?