Реализация ASP.NET Identity в существующей базе данных - PullRequest
0 голосов
/ 05 июля 2018

У меня есть существующий проект и база данных SQL с таблицей Users (назовем ее «MyOldUsersTable») и прикрепленными таблицами (адрес, телефоны, должности и т. Д.) С отношениями PK-FK.

Примечание: эта база данных не использует ни членство, ни личность. Это база данных, извлеченная из другого проекта, и «MyOldUsersTable» не содержит никакой информации для входа (пароль, последний вход в систему и т. Д.)

Я начал с использования проекта Web Api с удостоверением, но он генерирует таблицы по умолчанию (AspNetUsers, AspNetUserRoles, AspNetUserLogins ...)

Цель: получить удостоверение ASP.NET для использования существующих таблиц

Я попробовал это решение: Как изменить имена таблиц при использовании удостоверения ASP.NET для Visual Studio 2013? Но Identity переименовывает «MyOldUsersTable» в «MyOldUsersTable1» и переименовывает таблицу «AspNetUsers» в «MyOldUsersTable». Это было не очень полезно.

Каков наилучший способ продолжить? Я вижу три варианта:

  1. Решение 1. Переместите поля таблицы «MyOldUsersTable» в таблицу «ASPNETUser» и измените PK-FK с другими таблицами
  2. Решение 2. Убедитесь, что Identity понимает, что таблица пользователей теперь называется «MyOldUsersTable»
  3. Решение 3. Оставьте две системы и просто добавьте PK-FK между «AspNetUsers» и «MyOldUsersTable»

1 Ответ

0 голосов
/ 11 июля 2018

Решение 2. Оставьте две системы и просто добавьте PK-FK между «AspNetUsers» и «MyOldUsersTable» . Возможно, но в полях могут быть дубликаты (электронные письма, телефон). Кроме того, иметь две таблицы пользователей для обслуживания не идеально.

Это работает при добавлении отношения один к нулю к одному между таблицами следующим образом:

        modelBuilder.Entity<MyOldUsersTable>()
            .HasOptional(e => e.ApplicationUser)
            .WithRequired(e => e.MyOldUsersTable)
            .Map(m => m.MapKey("MyOldUsersTableId"))
            .WillCascadeOnDelete(false);

Наилучшее: решение 3. Дайте Identity понять, что таблица пользователей теперь называется «MyOldUsersTable», удалив все поведения по умолчанию, исходящие из IdentityUser.

Первый шаг - удалить ссылку на IdentityDbContext, заменив:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>

по:

public class ApplicationDbContext : DbContext 

Затем замените пользовательский магазин по умолчанию на пользовательский:

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));

Заменено на:

var manager = new ApplicationUserManager(new CustomUserStore(context.Get<ApplicationDbContext>()));

Наконец, CustomUserStore реализован с использованием необходимых интерфейсов. Например, для пароля, электронной почты и печати безопасности:

public class CustomUserStore : IUserStore<MyOldUsersTable, int>, IUserPasswordStore<MyOldUsersTable, int>, IUserEmailStore<MyOldUsersTable, int>,  IUserSecurityStampStore<MyOldUsersTable, int>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...