美文网首页
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