译第36节---基于代码迁移

Posted talentzemin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了译第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节---基于代码迁移的主要内容,如果未能解决你的问题,请参考以下文章

译第3节--- 配置开发环境

译第26节---配置一对多关系

译第17节---数据注解-Column

译第40节---EF6-命令监听

译第24节---Fluent API - 属性映射

译第41节---EF6-事务