zoukankan      html  css  js  c++  java
  • Code First项目Migrations

    关于Enable-Migrations指令说明
    我们知道,Enable-Migrations的作用是在Code First项目中使用数据迁移,
    通过get-help Enable-Migrations查看它的语法:

        Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <
        String>] [-ContextProjectName <String>] [-ConnectionStringName <String>] [-Force] [-ContextAssemblyName <String>] [-AppDomainBaseDirectory <String>] [<Co
        mmonParameters>]

        Enable-Migrations [-ContextTypeName <String>] [-EnableAutomaticMigrations] [-MigrationsDirectory <String>] [-ProjectName <String>] [-StartUpProjectName <
        String>] [-ContextProjectName <String>] -ConnectionString <String> -ConnectionProviderName <String> [-Force] [-ContextAssemblyName <String>] [-AppDomainB
        aseDirectory <String>] [<CommonParameters>]

    关于这个指令的说明:
    通过在项目中构建迁移配置类启用迁移。如果目标数据库由初始化程序创建,将创建初始迁移(除非通过EnableAutomaticMigrations参数启用自动迁移)。

    它有三个相关的指令可以查看更为具体的信息:
    若要查看示例,请键入: "get-help Enable-Migrations -examples".
    有关详细信息,请键入: "get-help Enable-Migrations -detailed".
    若要获取技术信息,请键入: "get-help Enable-Migrations -full".


    下面我们输入get-help Enable-Migrations -examples指令,查看它有几种使用方式:
    在一个Code First项目中启用数据迁移的方式有以下三种:
    -------------------------- 示例 1 --------------------------
    C:PS>Enable-Migrations

    //Scaffold a migrations configuration in a project with only one context
    在仅具有一个上下文的项目中支架迁移配置

    -------------------------- 示例 2 --------------------------
    C:PS>Enable-Migrations -Auto

    //Scaffold a migrations configuration with automatic migrations enabled for a project with only one context
    使用仅具有一个上下文的项目启用自动迁移的迁移配置
    -------------------------- 示例 3 --------------------------
    C:PS>Enable-Migrations -ContextTypeName MyContext -MigrationsDirectory DirectoryName

    //Scaffold a migrations configuration for a project with multiple contexts This scaffolds a migrations configuration for MyContext and will put the configuration and subsequent configurations in a new directory called "DirectoryName"
    支持具有多个上下文的项目的迁移配置支持MyContext的迁移配置,并将配置和后续配置放入名为“DirectoryName”的新目录中

    数据迁移步骤:
    1、Enable-Migrations
    a.在项目根目录下创建了一个Migrations文件夹
    b.在Migrations文件夹下新建一个Configuration.cs文件。

     
    (add-migration InitialCreate)
    如果前面没修改web.config的数据库名, 执行enable-migrations指令后,Migrations将会找到已有的数据库MVCDemo然后自动执行add-migration指令。

    2、Add-Migration FirstMigration
    执行 add-migration时,同样在Migrations文件夹里面,产生一个<timestamp>_InitialCreate.cs的文件。
    里面两个方法,Up和Down:

     
    Up方法创建数据库表,Down方法删除表。

    3、Update-Database
    update-database指令调用了Up方法来新建database的表(和data model entity set对应), 然后调用Seed方法来填充测试数据。

     
    如果更新数据库存在冲突而不能执行更新,可以添加 -Force强制执行,例如:“Update-Database -Force”


    设置自动迁移
    每次都通过控制台来进行迁移太过麻烦,可以设置为自动迁移。
    有以下两个参数可以对自动迁移进行设置:
      1. AutomaticMigrationsEnabled:获取或设置 指示迁移数据库时是否可使用自动迁移的值。
      2. AutomaticMigrationDataLossAllowed:获取或设置 指示是否可接受自动迁移期间的数据丢失的值。如果设置为false,则将在数据丢失可能作为自动迁移一部分出现时引发异常。
    修改迁移的Configuration类如下:
    namespace GMF.Demo.Core.Data.Migrations
    {
        internal sealed class Configuration : DbMigrationsConfiguration<DemoDbContext>
        {
            public Configuration()
            {
                AutomaticMigrationsEnabled = true;
                AutomaticMigrationDataLossAllowed = true;

            }

            protected override void Seed(DemoDbContext context)
            {
                List<Member> members = new List<Member>
                {
                    new Member { UserName = "admin", Password = "123456", Email = "admin@gmfcn.net", NickName = "管理员" },
                    new Member { UserName = "gmfcn", Password = "123456", Email = "mf.guo@qq.com", NickName = "郭明锋" }
                };
                DbSet<Member> memberSet = context.Set<Member>();
                memberSet.AddOrUpdate(m => new { m.Id }, members.ToArray());
            }
        }
    }
    修改数据库初始化策略如下:
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<DemoDbContext, Configuration>());

  • 相关阅读:
    cakephp异常机制
    你的效率是整理出来的——张一驰
    eclipse常用总结
    cakephp写Lib要点
    代码整洁之道-马丁-第3章 函数
    PHP静态方法如何编写
    编程常用工具
    代码大全(第二版)
    PHP实现AES对称加密
    【pytest】(三) pytest运行多个文件
  • 原文地址:https://www.cnblogs.com/zhaow/p/9753870.html
Copyright © 2011-2022 走看看