public async static Task Main(string[] args) { var host = CreateHostBuilder(args).Build(); using (var scope = host.Services.CreateScope()) { var services = scope.ServiceProvider; var configuration = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .Build(); Log.Logger = new LoggerConfiguration() .ReadFrom.Configuration(configuration) .CreateLogger(); try { var context = services.GetRequiredService<ApplicationDbContext>(); if (context.Database.IsSqlServer()) { context.Database.Migrate(); } var seedData = new SeedDataModel { FirstName = configuration.GetSection("SeedData:FirstName").Value, Email = configuration.GetSection("SeedData:Email").Value, UserPassword = configuration.GetSection("SeedData:UserPassword").Value, UserRole = configuration.GetSection("SeedData:UserRole").Value, UserRoleNormalized = configuration.GetSection("SeedData:UserRoleNormalized").Value, DefaultRoleName = configuration.GetSection("SeedData:DefaultRoleName").Value, DefaultRoleNormalizedName = configuration.GetSection("SeedData:DefaultRoleNormalizedName").Value, }; var userManager = services.GetRequiredService<UserManager<AppUser>>(); var roleManager = services.GetRequiredService<RoleManager<AppRole>>(); await ApplicationDbContextSeed.SeedDefaultUserAsync(userManager, roleManager, seedData); } catch (Exception ex) { var logger = scope.ServiceProvider.GetRequiredService<ILogger<Program>>(); Log.Logger.Error(ex, "An error occurred while migrating or seeding the database"); throw; } } await host.RunAsync(); }
public static async Task SeedDefaultUserAsync(UserManager <AppUser> userManager, RoleManager <AppRole> roleManager, SeedDataModel seedData) { var adminRole = new AppRole { Name = seedData.UserRole, NormalizedName = seedData.UserRoleNormalized }; var defaultRole = new AppRole { Name = seedData.DefaultRoleName, NormalizedName = seedData.DefaultRoleNormalizedName }; if (roleManager.Roles.All(r => r.Name != adminRole.Name)) { await roleManager.CreateAsync(adminRole); } if (roleManager.Roles.All(r => r.Name != defaultRole.Name)) { await roleManager.CreateAsync(defaultRole); } var admin = new AppUser { UserName = seedData.Email, Email = seedData.Email, FirstName = seedData.FirstName }; if (userManager.Users.All(u => u.UserName != admin.UserName)) { await userManager.CreateAsync(admin, seedData.UserPassword); await userManager.AddToRoleAsync(admin, adminRole.Name); } }