У меня проблемы с заполнением пользователей в моем веб-приложении. net core 3.1. Соответствующие таблицы создаются на SQL сервере, но при запуске приложения не создаются строки. Я не знаю, почему база данных не заполняется. Кто-нибудь может определить проблему?
Файл DBInitializer для заполнения пользователей базой данных
public class DBInitializer
{
public static async Task Initialize(IServiceProvider services)
{
ApplicationDbContext database = services.GetRequiredService<ApplicationDbContext>();
UserManager<ApplicationUser> userManager = services.GetRequiredService<UserManager<ApplicationUser>>();
RoleManager<IdentityRole> roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();
string roleA = "A";
string roleB = "B";
if (!database.Roles.Any())
{
IdentityRole role = new IdentityRole(roleA);
await roleManager.CreateAsync(role);
IdentityRole roleOne = new IdentityRole(roleB);
await roleManager.CreateAsync(roleOne);
await database.SaveChangesAsync();
}
if (!database.ApplicationUsers.Any())
{
AppUserA appUser = new AppUserA("App", "UserA", "AppUserA1@wmu.edu",
"306.000.0001", "AppUserA1");
await userManager.CreateAsync(appUser);
await userManager.AddToRoleAsync(appUser, roleA);
AppUserB appUserFour = new AppUserB("App", "UserB1", "AppUserB1@wmu.edu",
"306.000.0001", "AppUserB1");
await userManager.CreateAsync(appUserFour);
await userManager.AddToRoleAsync(appUserFour, roleA);
await database.SaveChangesAsync();
}
Класс ApplicationUser, который расширяет Asp. net Класс IdentityUser
public class ApplicationUser : IdentityUser
{
public String FirstName { get; set; }
public String LastName { get; set; }
public String FullName => FirstName + " " + LastName;
public ApplicationUser()
{
}
public ApplicationUser(string firstName, string lastName, string email, string phoneNumber, string password)
{
this.FirstName = firstName;
this.LastName = lastName;
this.Email = email;
this.PhoneNumber = phoneNumber;
this.UserName = email;
PasswordHasher<ApplicationUser> passwordHasher = new PasswordHasher<ApplicationUser>();
this.PasswordHash = passwordHasher.HashPassword(this, password);
this.SecurityStamp = Guid.NewGuid().ToString();
}
Класс AppUserA, расширяющий приложение пользователя
public class AppUserA : ApplicationUser
{
public AppUserA()
{
}
public AppUserA(string firstName, string lastName, string email, string phoneNumber, string password)
: base(firstName, lastName, email, phoneNumber, password)
{
}
}
Файл ApplicationDBContext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public DbSet<ApplicationUser> ApplicationUsers { get; set; }
public DbSet<AppUserA> AppUserAs { get; set; }
public DbSet<AppUserB> AppUserBs { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
}