Example #1
0
        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);
            }
        }