• 通过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();
            }
    
  • 相关阅读:
    支付宝H5 与网页端支付开发
    java图片操作--生成与原图对称的图片
    java 图片的自定义大小
    微信公众号开发(2)---消息的接收发送
    js 创建对象
    jqery多选
    金额大写转换
    js数字转换
    js日期格式转换
    java设计模式
  • 原文地址:https://www.cnblogs.com/mmry/p/9547657.html
Copyright © 2020-2023  润新知