[.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(你的数据库上下文 ...
随机推荐
- Centos7搭建集中式日志系统
在CentOS7中,Rsyslong是一个集中式的日志收集系统,可以运行在TCP或者UDP的514端口上. 目录 开始之前 配置接收日志的主机 配置发送日志的主机 日志回滚 附件:创建日志接收模板 ...
- flex直接访问服务器
1.读取指定文件里的xml: <?xml version="1.0" encoding="utf-8"?><s:WindowedApplica ...
- Oracle的rownum原理
Oracle中,按特定条件查询前N条记录,用个rownum就搞定了: SQL> select * from dept where rownum<3; 而对rownum用"> ...
- 十一、mysql输入安全
.尽量使用“绑定参数”功能,php中可用pdo进行一系列操作 .php可使用mysql_real_escape_string()函数进行输入过滤:
- iOS实例下载:使用腾讯的SDK将新浪微薄嵌入到应用中
最近在做应用中添加SNS分享功能,只需要分享功能,腾讯的SDK和Demo还是挺直观的,看了下基本上就能用了,而新浪的Oauth认证看了个例子是跳出程序到Web上去认证的,体验很不好.不过Oauth认证 ...
- WebApi2 jsonp跨域问题
一:故事背景 以前在写WebApi2的时候,一直是用作前后端分离(WebApi2 +angularjs),可是最近自己在给WebApp写接口的时候遇到了很多坑,总结一下就是跨域问题.而跨域问题 ...
- easy ui 菜单和按钮(Menu and Button)
http://www.zi-han.net/case/easyui/menu&button.html
- mysql 连接丢失错误解决(转载)
1.1 错误信息: Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet succes ...
- 高动态范围光照(High Dynamic Range Imaging,简称HDRI或HDR)
1 HDR基本概念 高动态范围光照(High Dynamic Range Imaging,简称HDRI或HDR),是一种表达超过了显示器所能表现的亮度范围的图像映射技术,已成为目前游戏应用不可或缺的 ...
- shell复习---文件解压命令
需要自己部署服务端,故在申请了空间之后,需要自己安装linux自己,自己安装Apache等,所以下载的压缩文件需要运行.网上找了一些解压命令不对,特别试了下面的方法有效,特别记录一下: 用ssh 登陆 ...