zoukankan      html  css  js  c++  java
  • 通过webhost扩展方式初始化EFCore数据库

    通过webhost扩展方式初始化EFCore数据库

    1.定义WebHostMigrationExtensions类

     public static class WebHostMigrationExtensions
        {
            public static IWebHost MigrationDbContext<TContext>(this IWebHost host,
                Action<TContext, IServiceProvider> seeder) where TContext : DbContext
            {
                using (var scope = host.Services.CreateScope())
                {
                    var services = scope.ServiceProvider;
                    var logger = services.GetRequiredService<ILogger<TContext>>();
                    var context = services.GetService<TContext>();
                    try
                    {
                        context.Database.Migrate();
                        seeder(context, services);
                        logger.LogInformation($"执行DbContext{typeof(TContext).Name} seed执行成功!");
                    }
                    catch (Exception ex)
                    {
                        logger.LogError(ex, $"执行DbContext{typeof(TContext).Name} seed执行失败!");
                    }
                }
    
                return host;
            }
        }
    
    public class ApplicationContextSeed
        {
            private UserManager<User> _userManager;
    
            public async Task SeedAsync(ApplicationDbContext context,IServiceProvider service)
            {
                if (!context.Users.Any())
                {
                    _userManager = service.GetRequiredService<UserManager<User>>();
                    var defaultUser = new User
                    {
                        UserName = "Luna@qq.com",
                        Email = "Luna@qq.com",
                        NormalizedEmail= "Luna@qq.com",
                        NormalizedUserName = "admin"
                    };
                    var result = await _userManager.CreateAsync(defaultUser, "pwd123456");
                    if (!result.Succeeded)
                    {
                        throw new Exception("初始化数据库失败");
                    }
                }
            }
        }
    

    2.在buildWebHost中调用

    public static void Main(string[] args)
            {
                BuildWebHost(args)
                .MigrationDbContext<ApplicationDbContext>((context, services) =>
                    {
                        new ApplicationDbContextSeed().SeedAsync(context, services).Wait();
                    })
                    .Run();
            }
    
  • 相关阅读:
    计蒜客
    CodeForces -1216B.Shooting
    关于gets读入因为缓冲区出现的问题
    CodeForces
    Codeforces Round #603 (Div. 2) C.Everyone is A Winner!
    Codeforces Round #603 (Div. 2) A.Sweet Problem
    Codeforces Round #603 (Div. 2)B. PIN Codes
    Codeforces 524C.The Art of Dealing with ATM(暴力)
    Codeforces Round #600 (Div. 2) C. Sweets Eating
    数组的定义和初始化
  • 原文地址:https://www.cnblogs.com/mmry/p/9547657.html
Copyright © 2011-2022 走看看