让Code First下的数据库的迁移更加简单
Code First给我们的程序开发带了很多便利,之前的版本中一个比较不大方便的地方是数据库迁移,麻烦不说,往往还和上下文相关,在不同的版本之间的数据库进行迁移还很容易失败,并且一旦失败还不大容易找到解决方案。可能是微软已经意识到这个不足,现在Entity Framework已经支持数据库自动迁移了,比之前的方案要简单太多,下面简单的介绍一下如何使用自动迁移。
开始迁移之前:
开始迁移之前,需要将要迁移的项目设置为默认项目。这一步非常重要,否则后面会出现许多莫名其妙的错误,它包括两个步骤
- 在解决方案管理器中把默认项目切换到目标项目(这一步在VS2015 Preview中貌似已经不需要了)
- 将包管理器的默认项目切换到目标项目
一、使能自动迁移:
在程序包管理器控制台中运行 Enable-Migrations –EnableAutomaticMigrations 命令,此时在项目中创建一个Migrations文件夹。

该文件夹保存着迁移的升级脚本,记录着一些迁移配置,大部分的时候无需关注。这一步只需要在第一次操作的时候干,平时无需管它。
二、开始迁移:
在程序包管理器控制台中运行 Update-Database –Verbose 即可。Visual Studio便会自动比较当前数据库和目标数据库架构,生成升级SQL,将其应用到目标数据库。升级的SQL脚本可以在程序包管理器中打印出来,可以在无法使用Visual Studio的地方用于手动升级。
小结
也就是说,大部分的时候只需要进行如下两步即可:
- 将包管理器的默认项目切换到模板项目
- 在程序包管理器中执行 Update-Database –Verbose
非常简单是不是。不过,还有如下几个地方需要注意一下:
有损升级:如果我们进行了如删除列,限制数据精度的时候,这个时候升级的时候就会出现错误提示,遇到这种情况,首先确保升级是安全的,然后通过增加-force参数强制升级。或者直接修改Configuration.cs的AutomaticMigrationDataLossAllowed选项,放开有损升级检查。(不大建议)
不兼容的升级:如果我们进行了加入了非空列,要进行数据转换等不兼容的升级的时候,自动升级会失败,这个时候则需要和传统的迁移方式那样构造升级代码,比较麻烦,且容易出错。如果没有特殊需求不建议进行不兼容的升级。
程序的兼容性:虽然我们现在可以将数据库非常简单的升级,但是数据库中仍然保存着之前的那些老的数据,此时需要我们的程序能兼容老版本的数据。
参考资料
让Code First下的数据库的迁移更加简单的更多相关文章
- 使用Code first 进行更新数据库结构(数据迁移)
CodeFirst 背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会 ...
- Code First 下自动更新数据库结构(Automatic Migrations)
示例 Web.config <?xml version="1.0" encoding="utf-8"?> <configuration> ...
- ubuntu 下 mysql数据库的搭建 及 数据迁移
1.mysql的安装 我是使用apt-get直接安装的 :sudo apt-get install mysql-server sudo apt-get install mysql-client 2.配 ...
- Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 (需暂停服务的方式)
Linux系统下 MYSQL数据库中的数据库文件在本机内迁移 本机采用Ubuntu16.04系统,tar方式安装MySQL5.7.21 数据库安装文件夹为 /home/devil/mysql 现 ...
- Ubuntu 下 Mariadb 数据库的安装和目录迁移
Ubuntu 下 Mariadb 数据库的安装和目录迁移 1.简介 本文主要是 Ubuntu 下 Mariadb 数据库的安装和目录迁移,同样适用于 Debian 系统:Ubuntu 20.0.4 M ...
- 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表
创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...
- Code First操作Mysql数据库
前面博客也讲了,自己做一个网站,选用的是MVC+EF Code First+MySql+EasyUI,先说下技术选型.一.为什么选择MVC? 因为之前自己做的系统大部分是webForm,MVC的之前也 ...
- 在Code first中使用数据库里的视图
如果想在Code first中使用数据库里的视图 (不管你出于什么原因),目前的方法有2种. 一.使用Database.SqlQuery<T>("查询语句"),如: v ...
- 转载Code First Migrations更新数据库架构的具体步骤
[转载] Code First Migrations更新数据库结构的具体步骤 我对 CodeFirst 的理解,与之对应的有 ModelFirst与 DatabaseFirst ,三者各有千秋,依项 ...
随机推荐
- PHP在变量前面加&是什么意思
比如: <? php $a = 'c' ; $b = & $a ; //表示$b 和 $a 引用了同一个变量 $a = 'abc' ; //这里重置了$a echo $b ; //将输出 ...
- leetcode 之Single Number(13)
看见这题我的第一反应是用哈希来做,不过更简洁的做法是用异或来处理,只要是偶数个都为0(0和任意数异或仍为数本身). int singleNumber(int A[], int n) { ; ; i & ...
- Python使用with结构打开多个文件
同时打开三个文件,文件行数一样,要求实现每个文件依次读取一行,然后输出,我们先来看比较容易想到的写法: with open(filename1, 'rb') as f1: with open(file ...
- Understanding Optional and Compulsory Parameters
If the MVC Framework cannot find a value for a reference type parameter (such as a string or object) ...
- HBase shell 命令创建表及添加数据操作
创建表,表名hbase_1102,HBase表是由Key-Value组成的,此表中Key为NAME 此表有两个列族,CF1和CF2,其中CF1和CF2下分别有两个列name和gender,Chin ...
- Pycharm5注册方式 @LYRE}}(T1[DD[@81IZDU$A
0x1 ,安装 0x2 , 调整时间到2038年. 0x3 ,申请30天试用 0x4, 退出pycharm 0x5, 时间调整回来. 注册方法2: 在 注册时选择 License server ...
- CentOS7安装和配置samba
(1)samba简介 CIFS:通用的internet文件系统,windows和unix系统之间共享文件的一种协议;客户端主要是windows:支持多节点同时挂载以及并发写入 (2)samba主配置文 ...
- Jenkins+maven+Tomcat配置发布
jenkins大多数情况下都是用来部署Java项目,Java项目有一个特点是需要编译和打包的,一般情况下编译和打包都是用maven完成,所以系统环境中需要安装maven. 实验环境: 10.0.0.1 ...
- 开源游戏地图编辑器MarbleMap
开源游戏地图编辑器MarbleMap MIT协议,MarbleMap是一款as3开发的游戏地图编辑器,他免费开源,同时支持Cocos2d-x坐标系和AS3坐标系,功能丰富,不过是一款新推出的开源项目, ...
- apache几个常见配置文件的作用
进行虚拟主机配置 NameVirtuaHost *:80 表示基于名称的虚拟主机 *:80表示监听本机所有IP的80端口上提供HTTP服务,*可以设置为具体IP<VirtualHost *:8 ...