让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 ,三者各有千秋,依项 ...
随机推荐
- 一台服务器支持多少TCP并发链接
误区一 1.文件句柄---文件描述符 每开一个链接,都要消耗一个文件套接字,当文件描述符用完,系统会返回can't open so many files 这时你需要明白操作系统对可以打开的最大文件数 ...
- POJ-1830
开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 6294 Accepted: 2393 Description ...
- BlockingQueue drainTo()
BlockingQueue BlockingQueue的核心方法:放入数据: offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果Blockin ...
- 【转载】JAVA多线程和并发基础面试问答
转载自这里. 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.(校对注: ...
- Zabbix历史数据库迁移 及分区
https://blog.csdn.net/hkyw000/article/details/78971201?utm_source=blogxgwz6
- .net core 2.0学习记录(四):Middleware使用以及模拟构建Middleware(RequestDelegate)管道
.net Core中没有继续沿用以前asp.net中的管道事件,而是开发了一个新的管道(Middleware): public class MiddlewareDemo { private reado ...
- 02 java 基础:java 文件名与类名关系 CLASSPATH
java 类修饰符:通常情况下使用 public 修饰,此时,java 强制要求 .java 文件名需与该 public 修饰类名一致,否则无法编译通过.如若没有加修饰符,文件名与类名可无任何关联. ...
- HDU 1097.A hard puzzle-快速幂/取模
快速幂: 代码: ll pow_mod(ll a,ll b){ ll ans=; while(b){ ==){ ans=ans*a%mo ...
- 【我要学python】爬虫准备之了解基本的html标签
HTML 标题 <h1>This is a heading</h1> HTML 段落 <p>This is a paragraph.</p> HTML ...
- ShiroFilterFactoryBean分析
创建核心Filter 同其他框架一样,都有个切入点,这个核心Filter就是拦截所有请求的. 通过web.xml中配置的Filer进入,执行init方法获取这个instance,调用下面的create ...