Я использую членство 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?