美文网首页
结构修改和迁移

结构修改和迁移

作者: 灭蒙鸟 | 来源:发表于2017-02-25 18:29 被阅读132次

    layout: docs-default

    Schema 修改和迁移

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

    EF提供了migrations (more info herehere) 来修改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());
            }
    

    相关文章

      网友评论

          本文标题:结构修改和迁移

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