[.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(你的数据库上下文 ...
随机推荐
- 这个SpringMVC的一直刷屏的问题你见过吗?无解
严重: Servlet.service() for servlet DispatcherServlet threw exceptionjava.lang.StackOverflowError at o ...
- ItemsControl 使用Grid布局
ItemsControl控件经常用到,在ItemsPanel里大多是StackPanel,WrapPanel,以下项目演示如何使用Grid用于ItemsControl布局 1.先看运行效果 2.xam ...
- Java中Map的用法详解
Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collecti ...
- InnoDB外键使用小结
USE `wfc_database`; # 主表(也可以称作:被参照表.referenced table.outTable) ALTER TABLE `app` ENGINE=INNODB; # 从表 ...
- Determining IP information for eth0… failed; no link present. Check cable
[root@hexuweb101 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0添加下面代码: check_link_down () { return ...
- 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证
http://blog.csdn.net/toss156/article/details/7638529
- Mac OS X 10.10 Yosemite PHP 5.5.14 free type support fix
通过将php将至5.4来勉强支持freetype扩展,不推荐此方法 after upgrading to new Mac OS X Yosemite, i noticed that free type ...
- Unity3d中所有特殊的文件夹
1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor 和 /Editor 是一样的,无论多少个叫Editor的 ...
- (转载)猫都能学会的Unity3D Shader入门指南(一)
原文地址 http://onevcat.com/2013/07/shader-tutorial-1/ 动机 自己使用Unity3D也有一段时间了,但是很多时候是流于表面,更多地是把这个引擎简单地用作脚 ...
- DataTable经典报错{列/行已属于其他表}
Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除, 还可以通过datatable.RejectChange ...