因】

  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)的更多相关文章

  1. CRL快速开发框架系列教程一(Code First数据表不需再关心)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  2. EF Code First 数据迁移配置

    这里我想讲清楚code first 数据迁移的两种模式,还有开发环境和生产环境数据迁移的最佳实践. 1.1 数据迁移综述 EF Code first 虽然已经有了几种不同的数据库初始化策略,但是大部分 ...

  3. EF Code First 数据迁移操作

    打开执行命令窗体 1.EF Code First创建数据库 PM> Install-Package EntityFramework 2.EF Code First数据库迁移 2.1.生成数据库 ...

  4. Asp.Net MVC 常用开发方式之EF Code First

    在我们的工作和学习当中,经常会遇到中小型项目,这些项目除了业务上的区别较大外,对于底层和数据访问,其实都差不多.记得以前做项目时,每次都要重复的写底层操作数据库的代码,不仅浪费时间,也无太大意思,后来 ...

  5. [.NET MVC进阶系列03] Views 视图基础

    [注:此文对应Chapter 3:Views] 一.View的功能: 1.View用来呈现页面UI,通过Controller来指定View: 要注意的是,MVC和以前基于文件的Web应用不同,URL指 ...

  6. MVC 使用EF Code First数据迁移之添加字段

    PM> add-migration 20161109   -Force 正在为迁移“20161109”搭建基架.此迁移文件的设计器代码包含当前 Code First 模型的快照.在下一次搭建迁移 ...

  7. EF code First数据迁移学习笔记(转)

    转自:http://www.cnblogs.com/icyJ/p/migration.html 准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-pa ...

  8. EF code First数据迁移学习笔记

    准备工作 1.新建一个控制台项目, 在"程序包管理控制台"执行 Install-package EntityFramework  //安装EF环境 2.在项目下新建类(Paper) ...

  9. EF Code First 数据迁移命令

    只需要开启程序管理控制台(Package Manager Console) 然后输入  Enable-Migrations -ContextTypeName youContextdb(你的数据库上下文 ...

随机推荐

  1. 这个SpringMVC的一直刷屏的问题你见过吗?无解

    严重: Servlet.service() for servlet DispatcherServlet threw exceptionjava.lang.StackOverflowError at o ...

  2. ItemsControl 使用Grid布局

    ItemsControl控件经常用到,在ItemsPanel里大多是StackPanel,WrapPanel,以下项目演示如何使用Grid用于ItemsControl布局 1.先看运行效果 2.xam ...

  3. Java中Map的用法详解

    Map简介 将键映射到值的对象.一个映射不能包含重复的键:每个键最多只能映射到一个值.此接口取代 Dictionary 类,后者完全是一个抽象类,而不是一个接口. Map 接口提供三种collecti ...

  4. InnoDB外键使用小结

    USE `wfc_database`; # 主表(也可以称作:被参照表.referenced table.outTable) ALTER TABLE `app` ENGINE=INNODB; # 从表 ...

  5. Determining IP information for eth0… failed; no link present. Check cable

    [root@hexuweb101 ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0添加下面代码: check_link_down () { return ...

  6. 【IOS】利用ASIHTTPRequest 实现一个简单的登陆验证

    http://blog.csdn.net/toss156/article/details/7638529

  7. 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 ...

  8. Unity3d中所有特殊的文件夹

    1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor  和 /Editor 是一样的,无论多少个叫Editor的 ...

  9. (转载)猫都能学会的Unity3D Shader入门指南(一)

    原文地址 http://onevcat.com/2013/07/shader-tutorial-1/ 动机 自己使用Unity3D也有一段时间了,但是很多时候是流于表面,更多地是把这个引擎简单地用作脚 ...

  10. DataTable经典报错{列/行已属于其他表}

    Delete()之后需要datatable.AccepteChanges()方法确认完全删除,因为Delete()只是将相应列的状态标志为删除, 还可以通过datatable.RejectChange ...