Я использую выпускную версию (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 , но это неправильно!Ответы:
Вы можете сделать это легко, изменив IdentityModel.cs, как показано ниже:
Переопределите OnModelCreating в вашем DbContext, затем добавьте следующее, это изменит таблицу AspNetUser на «Users», вы также можете изменить имена полей, столбец Id по умолчанию станет User_Id.
или просто ниже, если вы хотите сохранить все стандартные имена столбцов:
Полный пример ниже (это должно быть в вашем файле IdentityModel.cs) я изменил мой класс ApplicationUser, чтобы он назывался User.
Обратите внимание, что мне не удалось заставить это работать, если текущая таблица существует. Также обратите внимание, какие столбцы не отображаются, будут созданы столбцы по умолчанию.
Надеюсь, это поможет.
источник
base.OnModelCreating
является первой строкой кода в переопределении, в противном случае остальные строки перезаписываются базовым классом Identity.Ниже мое рабочее решение:
Смотрите это для более подробной информации
источник
[text](link)
Вы можете попробовать переопределить этот метод в своем классе DbContext, чтобы сопоставить его с таблицей по вашему выбору:
источник
base.OnModelCreating(modelBuilder);
иначе модель не будет создана.Вы также можете создать классы конфигурации и указать каждую деталь каждого из ваших классов Identity, например:
А затем включите эти конфигурации в метод OnModelCreating ():
Это даст вам полный контроль над каждым аспектом классов Identity.
источник
Просто для целей документации, для того, кто приходит к этому посту в течение многих лет в будущем (как я, XD), все ответы на мой комментарий верны, но вы можете просто воспользоваться этим методом, данным Александру Букуром в его блоге.
источник
Мы можем изменить имена таблиц по умолчанию для asp.net:
Кроме того, мы можем расширить каждый класс и добавить любое свойство в классы, такие как «IdentityUser», «IdentityRole», ...
Чтобы сэкономить время, мы можем использовать расширяемый шаблон проекта AspNet Identity 2.0 для расширения всех классов.
источник
Но это не работает в .NET CORE (MVC 6) для этого нам нужно изменить привязку к
лайк
Это может помочь кому-то :)
источник