zoukankan      html  css  js  c++  java
  • [.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

  • 相关阅读:
    npm version patch
    nginx 操作
    基于 Vue CLI 组件库封装,按需加载实现
    nginx 配置文件路径获取
    Laravel 生产资源路由并指定模型
    base.js,通用js方法,Js方法封装
    jquery.params.js,Jquery获取页面参数,js获取页面参数
    layui使用,LayUI select不显示,LayUI文件上传,Layui自定义校验规则
    Layer弹窗消息封装,Layer消息提示封装,Layer使用
    Html跨域js封装,前端页面跨域js,postMessage实现跨域
  • 原文地址:https://www.cnblogs.com/chutianshu1981/p/3272357.html
Copyright © 2011-2022 走看看