20.2.翻译系列:EF 6中基于代码的数据库迁移技术【EF 6 Code-First系列】

原文连接:https://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspxhtml

 

EF 6 Code-First系列文章目录:数据库

 

在前面的一节中,你学习了自动迁移技术,当实体改变的时候,自动进行数据库迁移。这里你将会学习基于代码的数据库迁移技术。app

基于代码的数据库迁移技术,在迁移的时候,提供了更多的控制。例如容许你配置添加额外的字符串,例如设置列的默认值,配置计算列等等。ide

为了使用基于代码的数据库迁移,你须要在程序包管理控制台中输入:学习

  1. Enable-Migrations:在项目中启用数据库迁移,而后会建立一个Configuration类
  2. Add-Migration:建立了一个迁移类,其中指定了Up和Down方法。
  3. Update-Database:执行Add_migration指令中建立的迁移,将改变应用到数据库中。

为了使用基于代码的数据库迁移,首先在程序包管理控制台中执行enable-migrations命令。测试

Enable-Migrations指令会建立Configuration类,这个Configuration类继承自DbMigrationsConfiguration ,Configuration类中包含这句代码:AutomaticMigrationsEnabled = false.ui

如今你须要在上下文类中设置数据库初始化策略为MigrateDatabaseToLatestVersion :spa

public class SchoolContext: DbContext { public SchoolDBContext(): base("SchoolDB") { Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolDBContext, EF6Console.Migrations.Configuration>()); } public DbSet<Student> Students { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { } }

 

如今使用Add-Migration命令建立一个迁移类 ,后面跟着迁移类的名称:.net

 

 上面的命令将会建立一个时间戳_SchoolDB-v1.cs文件,类里面包含Up和Down方法:翻译

 

 正如你所见,Up方法包含建立数据库对象的代码,而且Down方法包含删除数据库的代码。你一样能够编写代码,进行额外的配置。这就是优于自动迁移的地方。

为了了解更多add-migrations命令参数,你能够执行get-help add-migration或者get-help add-migration -detailed:

PM> get-help add-migration NAME Add-Migration SYNOPSIS Scaffolds a migration script for any pending model changes. SYNTAX Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>]     [-ConnectionStringName <String>] [-IgnoreChanges] [-AppDomainBaseDirectory <String>] [<CommonParameters>] Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String> [-IgnoreChanges] [-AppDomainBaseDirectory <String>] [<CommonParameters>] DESCRIPTION Scaffolds a new migration script and adds it to the project. RELATED LINKS REMARKS To see the examples, type: "get-help Add-Migration -examples". For more information, type: "get-help Add-Migration -detailed". For technical information, type: "get-help Add-Migration -full".

 

在使用Add-Migration命令以后,你须要更新数据库。经过执行Update-Database命令,来提交修改到数据库中,还能够在后面加上–verbose 就能够看到生成的SQL脚本:

 

执行get-help update-database或者get-help update-database -detailed命令:

PM> get-help update-database NAME Update-Database SYNOPSIS Applies any pending migrations to the database. SYNTAX Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [-AppDomainBaseDirectory <String>] [<CommonParameters>] Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String> [-AppDomainBaseDirectory <String>] [<CommonParameters>] DESCRIPTION Updates the database to the current model by applying pending migrations. RELATED LINKS REMARKS To see the examples, type: "get-help Update-Database -examples". For more information, type: "get-help Update-Database -detailed". For technical information, type: "get-help Update-Database -full".

 

到这个时候,数据库就被建立或更新了,如今无论何时,模型发生改变的时候,执行Add-Migration 带上参数名,就建立一个新的迁移文件,而后执行Update-Database命令,就将修改提交到数据库了。

 

迁移回退

 

假设你想要回退到以前的任何一个状态,那么你能够执行update-database后面跟着–TargetMigration,指定你想要回退的版本。例如,假设SchoolDB数据库有不少迁移记录,可是你想回退到第一个版本,那么你能够执行下面的代码:

PM> update-database -TargetMigration:SchoolDB-v1
相关文章
相关标签/搜索