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

 

posted @ 2013-08-22 07:20  chutianshu_1981  阅读(664)  评论(0编辑  收藏  举报