zoukankan      html  css  js  c++  java
  • 50-Identity MVC:DbContextSeed初始化

    1-创建一个可以启动时如果没有一个账号刚创建1个新的账号

    namespace MvcCookieAuthSample.Data
    {
        public class ApplicationDbContextSeed
        {
            public async Task SeedAsync(ApplicationDbContext context, IServiceProvider service)
            {
                if (!context.Users.Any())
                {
                    var _userManager= service.GetRequiredService<UserManager<ApplicationUser>>();
                    var user = new ApplicationUser() {
                         Email="qinzhb@163.com",
                         UserName="qinzhb",
                         NormalizedUserName="qinzhb"
                    };
    
                    var result = await _userManager.CreateAsync(user, "123456@Byd");
                    if (!result.Succeeded)
                    {
                        throw new Exception("初始化用户失败");
                    }
    
                }
            }
        }
    }

    2-增加一个扩展方法,用于启动时初始化数据库

    namespace MvcCookieAuthSample
    {
        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 service = scope.ServiceProvider;
                    var logger = service.GetRequiredService<ILogger<TContext>>();
                    var context =  service.GetService<TContext>();
    
                    try
                    {
                        context.Database.Migrate();
                        seeder(context, service);
                        logger.LogInformation("执行方法数据库初始化成功");
    
                    }
                    catch
                    {
                        logger.LogError("执行数据库数据库初始化密码失败");
                    }
    
                }
                
                return host;
            }
        }
    }

    3-把上面的2方法增加到启动类中

      public static void Main(string[] args)
            {
                CreateWebHostBuilder(args)
                    
                    .Build()
                    .MigrationDbContext<ApplicationDbContext>((context,services)=> {
                        new Data.ApplicationDbContextSeed().SeedAsync(context, services).Wait();
                    }).Run();
            }
  • 相关阅读:
    怎样从基本原理解释复制型共享账本的价值
    BZOJ3223:文艺平衡树——超详细题解
    BZOJ3223:文艺平衡树——超详细题解
    BZOJ3223:文艺平衡树——超详细题解
    BZOJ3223:文艺平衡树——超详细题解
    my stackoverflow
    my stackoverflow
    my stackoverflow
    my stackoverflow
    STM32 Flash 永久用户数据空间
  • 原文地址:https://www.cnblogs.com/qinzb/p/9458105.html
Copyright © 2011-2022 走看看