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,在这块上耽误了好几天时间,算是有点收获吧,分享给大家,还望方家斧正,见笑了