首页 > 代码库 > 【译】第36节---基于代码迁移
【译】第36节---基于代码迁移
原文:http://www.entityframeworktutorial.net/code-first/code-based-migration-in-code-first.aspx
当你想在迁移中有更多的操作,比如设置列的默认值等时,基于代码的迁移就非常有用了。
Code-First有两个基于代码的迁移命令:
Add-migration:它将支持下一次迁移,以便你对域类进行的更改
Update-database:它将根据你使用“Add-Migration”命令创建的最新脚手架代码文件将数据库的更改应用于数据库
假设一开始有学生和课程实体类,并且希望为应用程序使用基于代码的迁移。
在运行上述命令之前,必须使用enable-migrations命令为应用程序启用迁移。这些在我们之前用于自动迁移的包管理器中。 这将创建一个配置文件,就像自动迁移一样。
此外,你需要在上下文类中设置数据库初始化程序:
{ public SchoolDBContext(): base("SchoolDBConnectionString") { Database.SetInitializer(new MigrateDatabaseToLatestVersion<SchoolDBContext, SchoolDataLayer.Migrations.Configuration>("SchoolDBConnectionString")); } public DbSet<Student> Students { get; set; } public DbSet<Course> Courses { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); } }
现在,你必须创建一个脚手架代码文件,该文件由现有域类的数据库要求组成。
可以通过在程序包管理器中运行“add-migration”命令来执行此操作(从工具→库程序包管理器→程序包管理器控制台),将必须传递名称参数,该参数将作为代码文件名称的一部分。
add-migration 命令的语法:
Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [-IgnoreChanges] [<CommonParameters>] Add-Migration [-Name] <String> [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String> [-IgnoreChanges] [<Common Parameters>]
可以看到,该命令已在Migration文件夹中创建了一个新文件,其中传递给具有时间戳前缀的命令的参数名称:
使用add-migration命令创建上述文件之后,必须更新数据库。
可以使用“update-database”命令创建或更新数据库。
可以使用-verbose来查看数据库中发生了什么:
update-database 命令的语法:
Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<CommonParameters>] Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] -ConnectionString <String> -ConnectionProviderName <String> [<CommonParameters>]
此时,将创建或更新数据库。
现在,假设你添加了更多的域类。
因此,在运行应用程序之前,必须通过执行“Add-Migration”命令为新类创建一个脚本文件。
创建文件后,使用Update-Database命令更新数据库。
这样,你必须在每次在域类别中进行任何更改时重复Add-Migration 和update-database 命令。
回滚数据库更改:
假设要将数据库模式回滚到以前的任一状态,那么可以使用-TargetMigration参数使用“update-database”命令,如下所示:
update-database -TargetMigration:“First School DB schema”
使用“get-migration”命令查看应用了哪些迁移。
注意:使用“get-help”命令进行add-migration和update-database命令,以查看可以使用此命令传递哪些参数。
【译】第36节---基于代码迁移