ASP.NET标识 - 每种类型的多个对象集

时间:2017-01-24 08:18:27

标签: c# asp.net asp.net-mvc entity-framework asp.net-identity

  

我在我的应用中使用ASP.NET Identity时遇到错误。多个对象集   每种类型不受支持。该对象设置'ApplicationRoles'和   'Roles'都可以包含类型的实例   'XXX.Identity.ApplicationRole'。

我在stackoverflow中看到了一些关于此错误的问题。全部指示两个相同类型的DbSet对象。但是在我的DbContext中,没有相同类型的DbSets。

当我想要启用自动迁移时抛出异常

我的上下文看起来像这样:

public class XXXDbContext :
        IdentityDbContext<ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>
    {
    public override IDbSet<ApplicationUser> Users { get; set; }
    public DbSet<ApplicationUserLogin> ApplicationUserLogins { get; set; }
    public DbSet<ApplicationUserRole> ApplicationUserRoles { get; set; }
    public DbSet<ApplicationUserClaim> AppApplicationUserClaims { get; set; 
    public DbSet<ApplicationRole> ApplicationRoles { get; set; }
    public DbSet<ApplicationAction> ApplicationActions { get; set; }
    public DbSet<ApplicationActionRole> ApplicationActionRoles { get; set; }
}

2 个答案:

答案 0 :(得分:1)

检查你的IdentityDbContext,ApplicationRoles已经定义了它可能看起来像那样:

public System.Data.Entity.DbSet<ApplicationRoles> Roles{ get; set; }

删除那个,当ApplicationRoles在XXXcontext中再次声明时出现此错误....

答案 1 :(得分:1)

您可以将Identity类指向数据库中自己的表,并根据需要扩展功能,而不是覆盖它们,如下所示

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    // Map Entities to their tables.
    modelBuilder.Entity<MyUser>().ToTable("Users");

    // Set AutoIncrement-Properties
    modelBuilder.Entity<MyUser>().Property(r => r.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

    // Override some column mappings that do not match our default
    modelBuilder.Entity<MyUser>().Property(r => r.UserName).HasColumnName("username");
    modelBuilder.Entity<MyUser>().Property(r => r.PasswordHash).HasColumnName("password");
    modelBuilder.Entity<MyUser>().Property(r => r.Id).HasColumnName("lgn_key");
    modelBuilder.Entity<MyUser>().Property(r => r.Email).HasColumnName("primaryEmail");
}