zoukankan      html  css  js  c++  java
  • 【译】第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命令,以查看可以使用此命令传递哪些参数。

  • 相关阅读:
    Centos配置Apache phpadmin环境
    Linux添加FTP用户并设置权限
    Java中的过滤器
    【eclipse】注释模版
    [ci db操作]
    给vmware的Linux虚拟机添加硬盘
    基于LVDS/M-LVDS的数据通信
    如何找回丢失的硬盘分区表?
    vc++怎么可以直接刷掉MBR?搞笑的吧
    EFI、UEFI、MBR、GPT的区别
  • 原文地址:https://www.cnblogs.com/talentzemin/p/7324024.html
Copyright © 2011-2022 走看看