结构修改和迁移


layout: docs-default

Schema 修改和迁移

随着IdentityServer3的一步步改进,数据库schema可能会改变。考虑到这些schema的改变,托管程序需要来处理schema改变。

EF提供了migrations (more info here 和here) 来修改schema和数据库的改变。

DbContexts

这有三种不同的 DbContext-派生类在EF实现中:

  • ClientConfigurationDbContext
  • ScopeConfigurationDbContext
  • OperationalDbContext

这些数据库上下文类放在不同的assembly里面(如:IdentityServer3.EntityFramework) 而不是托管程序。

启用migrations

每个数据库上下文都需要创建迁移文件,要启用所有数据库上下文的迁移,需要在包管理控制台执行下面的命令:


    Enable-Migrations -MigrationsDirectory Migrations\ClientConfiguration -ContextTypeName ClientConfigurationDbContext -ContextAssemblyName IdentityServer3.EntityFramework -ConnectionStringName IdSvr3Config

    Enable-Migrations -MigrationsDirectory Migrations\ScopeConfiguration -ContextTypeName ScopeConfigurationDbContext -ContextAssemblyName IdentityServer3.EntityFramework -ConnectionStringName IdSvr3Config

    Enable-Migrations -MigrationsDirectory Migrations\OperationalConfiguration -ContextTypeName OperationalDbContext -ContextAssemblyName IdentityServer3.EntityFramework -ConnectionStringName IdSvr3Config

初始化架构必须定义,用真实的项目根命名空间替换$ProjectRootNamespace$然后创建初始化的schema迁移如下:


    Add-Migration -Name InitialCreate -ConfigurationTypeName $ProjectRootNamespace$.Migrations.ScopeConfiguration.Configuration -ConnectionStringName IdSvr3Config

    Add-Migration -Name InitialCreate -ConfigurationTypeName $ProjectRootNamespace$.Migrations.ClientConfiguration.Configuration -ConnectionStringName IdSvr3Config

    Add-Migration -Name InitialCreate -ConfigurationTypeName $ProjectRootNamespace$.Migrations.OperationalConfiguration.Configuration -ConnectionStringName IdSvr3Config

现在可以创建数据库啦,同样的$ProjectRootNamespace$需要替换成根命名空间:


    Update-Database -ConfigurationTypeName $ProjectRootNamespace$.Migrations.ClientConfiguration.Configuration -ConnectionStringName IdSvr3Config

    Update-Database -ConfigurationTypeName $ProjectRootNamespace$.Migrations.ScopeConfiguration.Configuration -ConnectionStringName IdSvr3Config

    Update-Database -ConfigurationTypeName $ProjectRootNamespace$.Migrations.OperationalConfiguration.Configuration -ConnectionStringName IdSvr3Config

一旦应用更新到新的版本,可以使用Add-MigrationUpdate-Database来更新架构,请检查 EF 文档 了解更多.

提供标准的作用域

我们可以使用来自ScopeConfiguration/Configuration.cs种子(Seed)方法来创建标准的作用域。

  protected override void Seed(IdentityServer3.EntityFramework.ScopeConfigurationDbContext context)
        {
            //Providing standard scopes
            foreach (var standardScope in StandardScopes.All)
            {
                if (!context.Scopes.Any(s => s.Name == standardScope.Name))
                    context.Scopes.Add(standardScope.ToEntity());
            }
            if (!context.Scopes.Any(s => s.Name == StandardScopes.Roles.Name))
                context.Scopes.Add(StandardScopes.Roles.ToEntity());
            if (!context.Scopes.Any(s => s.Name == StandardScopes.OfflineAccess.Name))
                context.Scopes.Add(StandardScopes.OfflineAccess.ToEntity());
        }

你可能感兴趣的:(结构修改和迁移)