• Entity Framework CodeFirst模式数据迁移


    EF CodeFirst模式的数据迁移还是比较麻烦的,尤其是迁移到生成环境,看了一些文章,都写的有些多,所以我决定写个简单粗暴的

    一,本地开发环境迁移

        1)直接重建数据库

        本地环境还是比较简单的,因为不需要考虑数据保留的问题,最简单的办法就是DropCreateDatabaseIfModelChanges,模型一有变化就直接重建数据库

        2)使用迁移命令:

           首先要启用迁移,在程序包管理器控制台输入:enable-migrations,会发现项目多了一个文件夹

           

          打开Configuration.cs发现里面有两个方法:

          

         第一个方法是迁移的配置选项,AutomaticMigrationsEnabled代表是否启动自动迁移。

         第二个方法的作用是在迁移的时候写入测试数据,如果不想写入测试数据,留空即可。

         下面开始迁移,先看看我们的模型:

          

          我们想增加一个字段,LastLoginIP,之后模型变这样

          

          怎么把这种变化映射到数据库呢?

          用命令add-migration user_add_column,user_add_column是迁移文件的名字,可以随便写

          运行之后,发现Migrations多了个文件:

          

          这就是我们要用到的迁移文件,怎么用呢?

          两种方法:

               1,程序包管理器控制台运行命令Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration:user_add_column,最后面跟的是迁移文件的名字,运行之后会得到一个Sql脚本文件,直接放到数据库里执行就可以了。

                   这个方法同样适用于往生成环境的数据迁移。

               

              2,在程序包管理器控制台接着执行命令:Update-Database,这样就可以执行我们刚才生成的迁移文件了。这个方法就没法在生产环境使用了。

              

        3)自动迁移

             有人说哥们这些方法有些繁琐啊,有没有简单点的,当然有了。

             首先打开Migrations下的Configuration.cs将构造方法下的AutomaticMigrationsEnabled属性改为true,这样就设置成了自动迁移,然后直接执行Update-Database命令,就完事了,简单吧。

             如果想生成自动迁移的脚本呢?用这个命令 Update-Database -Verbose -Script ,这样就可以输出迁移脚本文件,但并不真正执行迁移,这个方法适用于生成环境迁移。  

              

            看到脚本中的命令没?相当于系统自动生成了一个迁移文件,不需要我们手工去生成了。

    二,生产环境迁移

          其实前面已经讲了两种方法了,一种是将手动生成的迁移文件生成为sql脚本,另一种是将自动生成的迁移文件输出为sql脚本,下面再介绍一种方法

          在程序中写入“Database.SetInitializer(new MigrateDatabaseToLatestVersion<LmsContext, Migrations.Configuration>());”,注意LmsContext是我的数据库上下文,改成你自己的,然后发布程序集到生产环境,执行,这时可以发现数据库已经更新为最新版本了。这是最简单粗暴的办法了。

        当然这个方法也可以在本地环境中使用。

        注意:如果想通过注册 MigrateDatabaseToLatestVersion 数据库初始化器来更新数据库,一定要把Web.config中的contexts节点中的initializer注释掉,否则有可能会冲突,导致初始化器不起作用。

    ps:刚开始学习Entity Framework,在这块上耽误了好几天时间,算是有点收获吧,分享给大家,还望方家斧正,见笑了

  • 相关阅读:
    struts2实现的简单的Trie树
    从源码总结struts2命名空间的匹配规则
    Knockout2.x:ko.dataFor()、ko.contextFor()使用
    Reporting Services可選參數設置
    在.net CF中設置DataGrid中列的寬度
    VB.net 簡體繁體轉化代碼
    在SQL語句中獲取錯誤信息
    VS 2005 使用 Crystal report 發生載入報表失敗
    Lazarus一個奇怪的設置
    怎样用wince设备创建快捷方式
  • 原文地址:https://www.cnblogs.com/khjian/p/5741813.html
Copyright © 2020-2023  润新知