美文网首页
4- ASP.NET Core 2.1 Full Stack W

4- ASP.NET Core 2.1 Full Stack W

作者: 俊果果 | 来源:发表于2018-07-28 18:13 被阅读93次

    一、PostgreSQL 操作

    1、将psql安装目录的 bin 目录加入当前用户的path环境变量,并重启电脑
    例如我的 psql.exe 所在目录为:

    D:\PostgreSQL\pg10\bin

    1. 运行 cmder,连接数据库
     psql --username=postgres
    
    1. 运行命令,创建数据库
    CREATE DATABASE archdb_dev;
    

    然后命令 \l 查看数据库

    20180728162044.png

    或者直接使用图形界面工具 pgAdmin 进行操作:


    20180728162542.png
    1. 回到 Solution Folder,Data 下面的 Migrations 目录中包含的数据库迁移文件是针对 sqlite 的,我们不用,所以直接删除该文件夹。删除后Data下只有一个DbContext类
      20180728163213.png

    二、接下来添加自己的迁移文件:

    • 命令行进入工程目录,运行 dotnet ef 查看 ef 的安装情况
      20180728164145.png
    • 运行以下命令,生成 ApplicationDbContext 的 Migrations
    dotnet ef migrations add initial_identity_migration -c ApplicationDbContext -o Data/Migrations/AspNetIdentity/ApplicationDb
    

    成功后会生成我们刚才命令里面的 -o 目录
    并且这样生成的 Migration 文件才是我们所需针对 PostgreSQL 的

    • 运行以下命令,生成 ConfigurationDbContext 的 Migrations
     dotnet ef migrations add initial_is4_server_config_migration -c ConfigurationDbContext -o Data/Migrations/IdentityServer/ConfigurationDb
    
    • 然后运行以下命令生成 PersistedGrantDbContext 的 Migrations
     dotnet ef migrations add initial_is4_persisted_grant_migration -c PersistedGrantDbContext -o Data/Migrations/IdentityServer/PersistedGrantDb
    

    都完成后我们的 Migrations 目录会是这样:


    20180728170421.png

    三、Update Database

    • 运行命令,生成 ApplicationDbContext 相关表
    dotnet ef database update --context ApplicationDbContext
    
    20180728171301.png
    • 接下来运行命令,生成 IdentityServer 需要的相关表
    dotnet ef database update --context ConfigurationDbContext
    
    20180728171453.png
    • 运行命令,生成 PersistedGrantDbContext 相关表【一张:PersistedGrants】
     dotnet ef database update --context PersistedGrantDbContext
    

    全部完成后数据库中会有以下26张表


    20180728171804.png

    四、Seed Data -- ApplicationDbContext

    SeedData包含一个方法EnsureSeedData,用来为新数据库插入数据
    查找引用发现其在 Program类的Main方法中被调用

            public static void Main(string[] args)
            {
                var seed = args.Any(x => x == "/seed");
                if (seed) args = args.Except(new[] { "/seed" }).ToArray();
    
                var host = BuildWebHost(args);
    
                if (seed)
                {
                    SeedData.EnsureSeedData(host.Services);
                    return;
                }
    
                host.Run();
            }
    

    当程序运行传入参数 /seed时,运行初始数据库操作
    +运行命令dotnet run /seed,启动程序执行seed操作

    20180728173300.png
    完成后表【AspNetUsers】中生成 SeedData 中的两条数据
    20180728173441.png
    表【AspNetUserClaims】会有数据
    20180728174036.png

    五、SeedData -- ConfigurationDbContext & PersistedGrantDbContext

    接下来用另一种方式实现SeedData

    • Startup.cs中编写如下方法
            private void InitializeDatabase(IApplicationBuilder app)
            {
                // using a service scope
                using (var serviceScope = app.ApplicationServices.GetService<IServiceScopeFactory>().CreateScope())
                {
                    // Create PersistedGrant database if not exist, then do migration
                    serviceScope.ServiceProvider.GetRequiredService<PersistedGrantDbContext>().Database.Migrate();
    
                    var configDbContext = serviceScope.ServiceProvider.GetRequiredService<ConfigurationDbContext>();
                    configDbContext.Database.Migrate();
    
                    // Seed data if not exist any
                    if (!configDbContext.Clients.Any())
                    {
                        foreach (var client in Config.GetClients())
                        {
                            configDbContext.Clients.Add(client.ToEntity());
                        }
                        configDbContext.SaveChanges();
                    }
    
                    if (!configDbContext.IdentityResources.Any())
                    {
                        foreach (var res in Config.GetIdentityResources())
                        {
                            configDbContext.IdentityResources.Add(res.ToEntity());
                        }
                        configDbContext.SaveChanges();
                    }
    
                    if (!configDbContext.ApiResources.Any())
                    {
                        foreach (var api in Config.GetApis())
                        {
                            configDbContext.ApiResources.Add(api.ToEntity());
                        }
                        configDbContext.SaveChanges();
                    }
                }
            }
    

    然后在Configure方法添加调用

    • 运行程序dotnet run
      20180728180226.png
      相关数据也已被初始化,并且IdentityServer也在正常运行
      按照提示浏览器输入网址 http://localhost:5000 , 可以看到 IdentityServer 已正常运行
      20180728180455.png

    六、IdentityServer 资料

    Click here

    七、github code changes

    Click here

    相关文章

      网友评论

          本文标题:4- ASP.NET Core 2.1 Full Stack W

          本文链接:https://www.haomeiwen.com/subject/ebromftx.html