[.NET MVC进阶系列0x] EF Code First 数据迁徙(Migrations)
【因】
Entity Framework中使用Code First模式进行开发时,数据库是基于Models中的类自动生成的(生成时间:第一次运行MVC项目时),
每次更改Models中类结构,重新编译,就会导致数据库的更改,数据丢失
【果】
数据迁徙(Migration)应运而生,使用这种方式可以手动操控数据库的生成、更新;
数据迁徙还是会造成数据的丢失,但我们可以在数据迁徙时设定数据种子(seed),每次迁移后至少能保留初始测试数据。
【法】
1.前期准备(VS 2010、2012,并已经有MVC项目):
1)安装Nuget
2)调出“程序包管理器控制台”,安装Entity Framework(貌似vs 2012不用装)
2.开启数据迁徙
运行命令 Enable-Migrations ,为项目开启数据迁徙
可能出现的错误:
- 项目出错:解决方法,很简单,差错,将项目中错误更正即可,项目有错是不可能开始数据迁徙的。
- 存在多个context: 如果用vs 2012自带的MVC 4项目模板创建项目,会自动生成一套基础系统,里面包含用户验证系统,其中有一个UserCotext数据上下文来管理用户账号数据,会自动生成aspnetdb数据库。如果要使用自己定义的用户验证,最好建立空MVC项目,或者把VS 2012生成相关代码删除。
解决方法:Enable-Migrations -ContextTypeName WebServer.Repositories.EECCMSDb
使用带参的命令,指定要进行数据迁徙的数据上下文类
- 已在项目“WebServer”中启用迁移。若要覆盖现有迁移配置,请使用 -Force 参数。
出错原因:数据迁移命令已经使用过,在项目中已经生成了一个Migrations文件夹,其中生成了迁徙配置文件:Configuration.cs
其中已经设置的当前的数据迁徙方式
解决方法:
方法一,强行已在项目“WebServer”中启用迁移。使用 -Force 参数。
Enable-Migrations -Force 命令会覆盖原有的迁徙配置,自动生成的Configuration.cs会覆盖原有的,如果有Model类的更改,
还会同时成成一个加了时间戳(如,“201308210342435_InitialCreate.cs”)的迁徙数据结构初始化类,
之后再运行Update-Database命令,会更新数据库结构
方法二:使用增量式方法,Add-Migration,具体操作见下面的更新数据库
3.生成数据库:
生成数据库的方式很简单,运行一次项目即可
4.更新数据库:
1)强制自动更新(简单粗暴):
更新过Models中的类之后,直接使用Enable-Migrations -Force强制执行全新的数据迁徙
缺点:数据全部丢失,数据迁徙配置文件重置Configuration.cs会被重置为全新的
不建议使用,前期可以用一两次
2)增量更新
Add-Migration 基于现有你对模型的修改进行下一次的数据迁移
如: Add-Migration 自定义的迁徙名
会生成一个“时间戳_自定义的迁徙名.cs”的迁徙配置文件,里面写的是对Model类更改的数据库映射配置
还可以对迁徙的文件进行更改,配置成自己满意的
然后再执行Update-Database即可
参考:http://www.cnblogs.com/xiaoyaojian/archive/2012/08/09/2630351.html
[.NET MVC进阶系列0x] EF Code First 数据迁徙(Migrations)的更多相关文章
- CRL快速开发框架系列教程一(Code First数据表不需再关心)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- EF Code First 数据迁移配置
这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...
- EF Code First 数据迁移操作
打开执行命令窗体 1.EF Code First创建数据库 PM> Install-Package EntityFramework 2.EF Code First数据库迁移 2.1.生成数据库 ...
- Asp.Net MVC 常用开发方式之EF Code First
在我们的工作和学习当中,经常会遇到中小型项目,这些项目除了业务上的区别较大外,对于底层和数据访问,其实都差不多.记得以前做项目时,每次都要重复的写底层操作数据库的代码,不仅浪费时间,也无太大意思,后来 ...
- [.NET MVC进阶系列03] Views 视图基础
[注:此文对应Chapter 3:Views] 一.View的功能: 1.View用来呈现页面UI,通过Controller来指定View: 要注意的是,MVC和以前基于文件的Web应用不同,URL指 ...
- MVC 使用EF Code First数据迁移之添加字段
PM> add-migration 20161109 -Force 正在为迁移“20161109”搭建基架.此迁移文件的设计器代码包含当前 Code First 模型的快照.在下一次搭建迁移 ...
- EF code First数据迁移学习笔记(转)
转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-pa ...
- EF code First数据迁移学习笔记
准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework //安装EF环境 2.在项目下新建类(Paper) ...
- EF Code First 数据迁移命令
只需要开启程序管理控制台(Package Manager Console) 然后输入 Enable-Migrations -ContextTypeName youContextdb(你的数据库上下文 ...
随机推荐
- OSI与TCP/IP模型之比较
摘要:OSI参考模型和Internet模型(或称TCP/IP模型)作为计算网络发展过程影响力大的两大模型,它们共同之处是:都采用了层次结构的概念,从分析两者的异同入手,找出OSI的消亡和Interne ...
- asp.net mvc 伪静态路由配置
asp.net mvc实现伪静态路由必须按如下方式设置好,才能访问 .htm 或者.html页面 C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspne ...
- DataGridView控件-学习笔记总结
1.GridColor属性用来获取或设置网格线的颜色 dataGridView1.GridColor=Color.Blue; 2.设置宽度 .高度 dataGridView1.Columns[].Wi ...
- php 如何开启session
1.如果你在session_start()前没有输出内容,哪怕是一个句号也不行,就可以直接使用session_start)_; 2.如果你之前已经有输出内容了,可以使用以下方法: <?php o ...
- Javacript 客户端保存数据[ locaStorage ]
1.通常程序员们会使用Cookie进行一些小量的数据储存在客户端浏览器,但孰不知这样会造成不必要的带宽浪费 ,可使用 js 中的 locaStorage 来替代cookie进行存储,但不支持IE8以下 ...
- UIImageView加抖动效果(转)
CGAffineTransform moveRight = CGAffineTransformTranslate(CGAffineTransformIdentity, 20, 0); CGAffine ...
- 1874: [BeiJing2009 WinterCamp]取石子游戏 - BZOJ
Description小H和小Z正在玩一个取石子游戏. 取石子游戏的规则是这样的,每个人每次可以从一堆石子中取出若干个石子,每次取石子的个数有限制,谁不能取石子时就会输掉游戏. 小H先进行操作,他想问 ...
- 1187: [HNOI2007]神奇游乐园 - BZOJ
Description 经历了一段艰辛的旅程后,主人公小P乘坐飞艇返回.在返回的途中,小P发现在漫无边际的沙漠中,有一块狭长的绿地特别显眼.往下仔细一看,才发现这是一个游乐场,专为旅途中疲惫的人设计. ...
- BeanFactory和FactoryBean
BeanFactory和FactoryBean 1.BeanFactory BeanFactory定义了 IOC 容器的最基本形式,并提供了 IOC 容器应遵守的的最基本的接口,也就是Spring I ...
- 严重: The web application [] appears to have started a thread named [Abandoned connection cleanup thread] but has failed to stop it.
今日在重新部署项目时出现此问题,虽然对项目无影响,但问题就是问题.完整信息如下(使用idea工具): 十二月 05, 2015 11:44:27 上午 org.apache.catalina.star ...