Добрый день, вот подробное руководство для тех, кто хочет использовать в первую очередь подход к базе данных с настраиваемыми таблицами удостоверений с использованием Asp.Net Core 2.2 и ef core.
Шаг 1 ==> Сначала создайте базу данных и добавьте все таблицы, связи и ограничения
шаг 2 ==> предполагая, что вы добавили все зависимости ef framework, перейдите в Visual Studio и создайте один класс с именем, например, ApplicationUser, который наследуется от IdentityUser, также добавьте туда настраиваемые поля.
шаг 3 ==> настройте класс контекста БД для использования ApplicationUser и сделайте то же самое в Startup.cs при регистрации службы AddDbContext , а также используйте OnModelCreating для настройки имен таблиц идентификации . Не забудьте вызвать base.OnModelCreating (modelBuilder)
шаг 4 ==> добавить миграцию и обновить базу данных, это создаст таблицы идентичности в нашей уже существующей БД.
шаг 5 ==> Перейдите в свою систему управления реляционными базами данных (RDBMS) и убедитесь, что ваши настроенные таблицы идентификаторов были добавлены. Если это так, перейдите к шагу 6, иначе устраните проблему, прежде чем продолжить
step 6 ==> Ошибка dotnet ef dbcontext scaffold "connectionstring" Microsoft.EntityFrameworkCore.SqlServer -o Models / Entities -f -c "TempDbContext" команда от powershell или эквивалентная ей команда менеджера пакетов консоль
шаг 7 ==> Очень важно : найдите все связанные с таблицей идентичности объекты, имена которых были настроены на шаге 3. Убедитесь, что все эти 7 объектов наследуются от идентификатора, указав их тип первичного ключа, например:
public partial class AppUsers : IdentityUser<string>{}
public partial class AppUserTokens : IdentityUserToken<string>{}
public partial class AppUserRoles : IdentityUserRole<string>{}
public partial class AppUserLogins : IdentityUserLogin<string>{}
public partial class AppUserClaims : IdentityUserClaim<string>{}
public partial class AppRoles : IdentityRole<string>{}
public partial class AppRoleClaims : IdentityRoleClaim<string>{}
После этого перейдите к исходному классу DBContext, который зарегистрирован в ConfigureServices в файле startup.cs, и измените сигнатуру класса на
public class ApplicationDbContext : IdentityDbContext<AppUsers, AppRoles, string, AppUserClaims, AppUserRoles, AppUserLogins, AppRoleClaims, AppUserTokens>
Шаг 8: скопируйте весь метод DbSet и все внутри OnModelCreating из временного TempDBContext , автоматически сгенерированного командой scaffold на шаге 6, и замените то, что имеется в исходном DBContext или Вы также можете сделать TempDBContext своим основным DBContext, но не забудьте обновить ConfigureServices.
шаг 9. Обновите все ссылки на ApplicationUser и установите для них указатель на AppUsers , скопируйте все настраиваемые поля из ApplicationUser в AppUsers причина этого заключается в том, что ApplicationUser не имеет справочной таблицы для сопоставления в базе данных, а AppUsers имеет.
шаг 10 ==> Обновить все ваши представления и частичные представления, введенные с помощью
@inject SignInManager<AppUsers> SignInManager
@inject UserManager<AppUsers> UserManager
для использования AppUsers из ApplicationUser особенно _LoginPartial.cshtml и все готово. Теперь вы можете добавить учетные записи пользователей следующим образом:
var user = new AppUsers
{
Id = Guid.NewGuid().ToString(),
UserName = "example@gmail.com",
Email = "example@gmail.com",
PhoneNumber = "0123456789",
};
var result = await userManager.CreateAsync(user, "Ex@mple88@gmail.com");
Готово !!! Выполните некоторую очистку кода и удалите все файлы и код, который больше не нужен, вот как мне удалось заставить Identity работать с использованием имен пользовательских таблиц и подхода БД. Невыполнение следующих шагов приведет к ошибкам, которые я опубликовал, и многим другим. Спасибо за прочтение.