Я использую членство ASP.net в течение многих лет, и я только начинаю опробовать идентификатор ASP.net. Они только что выпустили версию 2.0 и которая должна поддерживать первичные ключи int. Я определил свои собственные классы идентификации следующим образом, чтобы получить поддержку целых первичных ключей:
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{  
}
public class UserLogin : IdentityUserLogin<int>
{
}
public class Role : IdentityRole<int, UserRole>
{
    public string Description { get; set; }  // Custom description field on roles
}
public class UserRole : IdentityUserRole<int>
{
}
public class UserClaim : IdentityUserClaim<int>
{
}
public class MyDbContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
    public MyDbContext() : this("MyDB") { }
    public MyDbContext(string connStringName) : base(connStringName)
    {
        this.Configuration.LazyLoadingEnabled = false;
        this.Configuration.ProxyCreationEnabled = false;
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<User>().ToTable("Users");
        modelBuilder.Entity<Role>().ToTable("Roles");
        modelBuilder.Entity<UserRole>().ToTable("UserRoles");
        modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
        modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
        base.OnModelCreating(modelBuilder);
    }
}
Когда я создаю миграцию базы данных, он правильно создает целочисленный столбец идентификатора для каждой из таблиц идентификации, однако он игнорирует мои пользовательские имена таблиц, указанные в методе OnModelCreating. Вместо этого я получаю имена таблиц, такие как dbo.AspNetUsers и dbo.AspNetRoles.
Я также попробовал добавить [Table("TableName")] в свои пользовательские классы идентичности и не имеет никакого эффекта.
При взгляде на примеры для ASP.net Identity 1.0 было похоже, что они повторяли каждую из строк modelBuilder.Entry<Type>().ToTable("TableName"), используя базовые классы Identity:
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<IdentityUser<int, IdentityUserLogin<int>, IdentityUserRole<int>, IdentityUserClaim<int>>>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<IdentityRole<int, UserRole>>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserRole<int>>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserLogin<int>>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims");
Однако я пробовал несколько вариантов, и мои миграции не генерировались. Я продолжал получать ошибки, похожие на Тип Microsoft.AspNet.Identity.EntityFramework.IdentityUser'4 [System.Int32, Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin'1 [System.Int32], Microsoft.AspNet.Identity. EntityFramework.IdentityUserRole'1 [System.Int32], Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim'1 [System.Int32]] 'не был отображен. Убедитесь, что тип не был явно исключен с помощью аннотации данных Ignore или NotMappedAttribute. Убедитесь, что тип был определен как класс, не является примитивным или общим и не наследуется от EntityObject.
Как создать собственные имена таблиц с целыми первичными ключами в ASP.net Identity 2.0?
