让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 ,三者各有千秋,依项 ...
随机推荐
- xtrabackup 安装、备份和恢复
xtrabackup 版本对应: 2.4 专针对 5.7 开发的,兼容 5.6, 5.5 2.3 针对 5.6 开发的,兼容5.5 2.2 针对5.5 开发的 安装包下载: wget https:// ...
- 剑指offer-高质量的代码
小结: 规范性:书写清晰.布局清晰.命名合理 完整性:完成基本功能.考虑边界条件.做好错误处理 鲁棒性:采取防御性编程.处理无效输入 面试这需要关注 输入参数的检查 错误处理和异常的方式(3种) 命名 ...
- STL容器之间的差异和联系
1.vector (连续的空间存储,可以使用[]操作符)快速的访问随机的元素,快速的在末尾插入元素,但是在序列中间的插入,删除元素要慢(涉及元素复制移动),而且如果一开始分配的空间不够的话,有一个 ...
- springboot项目的搭建
原文链接:http://www.cnblogs.com/winner-0715/p/6666302.html 后续完善(附图及详细过程)
- 【总结】IE和Firefox的Javascript兼容性总结
长久以来JavaScript兼容性一直是Web开发者的一个主要问题.在正式规范.事实标准以及各种实现之间的存在的差异让许多开发者日夜煎熬.为此,主要从以下几方面差异总结IE和Firefox的Javas ...
- Oracle数据库共享内存分配不足问题的解决
问题: ORA-: unable to allocate bytes of shared memory ("shared pool,)","session param v ...
- 【hdoj_2570】迷障
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2570 思路:贪心法.要求在浓度不超标的情况下,解药的最大体积.由于体积相同,可以先对浓度排序,然后从浓度小 ...
- mp4文件DASH切片程序
mp4文件DASH切片程序 一.简介 按照DASH标准文档要求与现有的DASH切片(生成DASH切片参见mb4box命令简介)来生成Initialization Segment与Media Segme ...
- Win7 + VirtualBox + CentOS(无桌面), 扩容
http://www.2cto.com/os/201401/269730.html 对于目前的网络开发者来说,比较好的搭档就是Win7+VirtualBox+CentOS的组合,既可以发挥Linux强 ...
- Codeforces Round #423 A Restaurant Tables(模拟)
A. Restaurant Tables time limit per test 1 second memory limit per test 256 megabytes input standard ...