Я использую выпускную версию (RTM, а не RC) Visual Studio 2013 (загруженную с MSDN 2013-10-18) и, следовательно, последнюю (RTM) версию AspNet.Identity. Когда я создаю новый веб-проект, я выбираю «Индивидуальные учетные записи пользователей» для аутентификации. Это создает следующие таблицы:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
Когда я регистрирую нового пользователя (используя шаблон по умолчанию), создаются эти таблицы (перечислены выше), и в таблицу AspNetUsers вставляется запись, которая содержит:
- Мне бы
- UserName
- PasswordHash
- SecurityStamp
- дискриминатор
Кроме того, добавляя открытые свойства в класс «ApplicationUser», я успешно добавил дополнительные поля в таблицу AspNetUsers, такие как «FirstName», «LastName», «PhoneNumber» и т. Д.
Вот мой вопрос. Есть ли способ изменить имена вышеприведенных таблиц (когда они впервые создаются) или они всегда будут именоваться с AspNet
префиксом, как я перечислил выше? Если имена таблиц могут называться по-разному, объясните, пожалуйста, как.
-- ОБНОВИТЬ --
Я реализовал решение @Hao Kung. Он создает новую таблицу (например, я назвал ее MyUsers), но он также создает таблицу AspNetUsers. Цель состоит в том, чтобы заменить таблицу «AspNetUsers» на таблицу «MyUsers». Смотрите код ниже и изображение базы данных созданных таблиц.
Я на самом деле хотел бы заменить каждую AspNet
таблицу своим собственным именем ... Для fxample, MyRoles, MyUserClaims, MyUserLogins, MyUserRoles и MyUsers.
Как мне сделать это и получить только один набор таблиц?
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string PhonePrimary { get; set; }
public string PhoneSecondary { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(): base("DefaultConnection")
{
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
}
}
- ОБНОВЛЕНИЕ ОТВЕТА -
Спасибо Хао Кунгу и Петру Стулински. Это решило мою проблему ...
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
}
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
как упомянуто @Sergey. В противном случае, недавно названная MyUsers
таблица имеет столбец дискриминатора, как указано @Daskul. Кроме того, MyUserClaims
структура вашей таблицы будет неправильной, как указал @Matt. Я думаю, что идея добавить это пришла из комментария к @Giang в блоге msdn , но это неправильно!