需求

在更新模型之后同步更新数据库里的表,并不丢失原有数据

使用默认值填充新增加的字段

EntityFramework迁移命令

Enable-Migrations  启用迁移

Add-Migration    为挂起的Model变化添加迁移脚本

Update-Database   将挂起的迁移更新到数据库

Get-Migrations     获取已经应用的迁移

DEMO

  Model中的原类型

  1. class Student
  2. {
  3. public int ID { get; set; }
  4. public int Name { get; set; }
  5. }

更新后

  1. class Student
  2. {
  3. public int ID { get; set; }
  4. public int Name { get; set; }
  5. public int Age{get;set;}
  6. }

在程序控制台中输入:

  1. PM> Enable-Migrations
  1. // 启用迁移
    // 参数:
  2. // -ContextTypeName:项目继承自DBContext的类名字。
  3. // -EnableAutomaticMigrations:开启自动迁移。
  4. // -ProjectName:存放DBContext类的项目名称。
  5. // -StartUpProjectName:解决方案中启动项目的名称,作用是调用该项目下的连接字符串。
  6. // -ConnectionStringName:连接字符串名称
    // -ConnectionString: 指定使用的连接字符串
    // -ConnectionProviderName: 指定连接字符串的provider名称
    // -Force:重写迁移配置
  7.  
  8. 结果:
    检测到数据库是由database initializer创建,为现有的数据库搭建初始化迁移脚本
    1.在本项目下创建了Migrations文件夹
    2.Migrations文件夹下创建Configuration类文件
      Configuration类: 此类允许针对上下文配置迁移的行为
    3.Migrations文件夹下创建_InitialCreate类文件(若为未生成数据库则无此文件)
      InitialCreate类: 此类表示数据库已经创建的对象
  9.  
  10. 可能会出现的错误
    1. No context type was found in the assembly 'DEMO'
      含义:找不到项目中的继承自DBContext的上下文类
      原因:
        1.没有上下文类
        2.指定了错误的项目
      解决方案:
        1.添加一个继承自DBContext的上下文类
  1. PM> Add-Migration
  2. // 为挂起的Model变化添加迁移脚本
  3. // 参数:// -Name: 指定脚本名称
  4. // -ProjectName:存放DBContext类的项目名称
  5. // -StartUpProjectName:解决方案中启动项目的名称,作用是调用该项目下的连接字符串。
    // -ConfigurationTypeName: 指定使用的迁移配置
    // -ConnectionStringName:连接字符串名称
  6. // -ConnectionString: 指定使用的连接字符串
  7. // -ConnectionProviderName: 指定连接字符串的provider名称
  8. // -Force:重写迁移配置
    // -IgnoreChanges: 忽略检测挂起的model改变,创建一个空迁移
  9.  
  10. 结果:
    1.生成一个自称自DbMigration的类,包含Up()和Down()方法,代表了更新前后两个版本的改动细节
    字段的增加 AddColumn()
    字段的删除 DropColumn()
  11. 可能会出现的错误
  1. PM> Update-Database
  2.  
  3. // 将挂起的迁移更新到数据库
  4. // 参数:
  5. // -SourceMigration: 指定迁移的名称作用更新的起点,默认使用最后一次应用的迁移
  6. // -TargetMigration: 指定将数据库更新到哪个迁移名称
  7. // -Script:生成SQL脚本
  8. // -Force: 重写迁移配置
  9. // -ProjectName:存放DBContext的项目名称
  10. // -StartProjectName: 解决方案中的启动项目名称
    // -ConfigurationTypeName: 使用指定的配置
    // -ConnectionStringName: 使用指定的连接字符串名称
    // -ConnectionString: 使用指定的连接字符串
  11. // -ConnectionProviderName: 指定连接字符串的provider名称
  12.  
  13. 可能会出现的错误

找不到对象“dbo.Quarter”,因为它不存在或者您没有所需的权限。

  1.  

应用程序启动后自动升级

使用 Enable-Migrations - EnableAutomaticMigrations 打开自动迁移

或者更改迁移配置脚本 Configuration 类构造函数

  1. public Configuration()
  2. {
      // 开启自动更新
  3.   AutomaticMigrationsEnabled = true;
      // 允许在自动更新时丢失数据
  4.   AutomaticMigrationDataLossAllowed = true;
  5. }

在上下文类DBContext类中的构造函数

  1. public DEMOContext() : base("name=DEMOContext")
  2. {
  3.   Database.SetInitializer(new MigrateDatabaseToLatestVersion<DEMOContext, Configuration>());
  4. }

EntityFramework - Code First - 数据迁移的更多相关文章

  1. 图文详解 解决 MVC4 Code First 数据迁移

    在使用Code first生成数据库后 当数据库发生更改时 运行程序就会出现数据已更改的问题  这时可以删除数据库重新生成解决 但是之前的数据就无法保留  为了保留之前的数据库数据  我们需要使用到C ...

  2. 解决 MVC4 Code First 数据迁移 数据库发生更改导致调试失败解决方法(二)

    文章转载自:http://www.cnblogs.com/amoniyibeizi/p/4486617.html 前几天学MVC过程中,遇到更改Model类以后,运行程序就会出现数据已更改的问题导致调 ...

  3. EF Code First 数据迁移配置

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

  4. Code First 数据迁移 转

    一.为模型更改设置 Code First 数据迁移 1.工具—>库程序包管理器—>程序包管理器控制台—>输入“Enable-Migrations”  或者 Enable-Migrat ...

  5. C#+EntityFramework编程方式详细之Code First 数据迁移

    在前几篇的C#+EntityFramework编程方式中介绍了C#+EntityFramework编程方式Code First ,Model First以及Dtatabase First 等编程方式, ...

  6. Code first 数据迁移

    前段时间用到了EF,整理一下 EF ,全称Entity FramWork.就是微软以ADO.NET为基础发展的所谓ORM(对象关系映射框架,或者说是数据持久化框架). 简单说就是根据实体对象操作数据库 ...

  7. EF Code First 数据迁移操作

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

  8. EF6:编写你自己的code first 数据迁移操作(睡前来一篇,翻译的)

    原英文版由EF团队成员 Rowan Miller 在2013年发表,此处只作翻译备忘. 数据迁移提供了一套强类型API,用于执行通用的操作,比如CreateIndex("dbo.Blogs& ...

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

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

随机推荐

  1. 安装xamp之后,appach、mysql等问题的总结

    问题一:无法启动的问题 如果他们无法启动,大多数情况是端口号被占用. 首先就是查看端口号:点击“netstart“按钮查看端口号的使用详情 如果被占用就点击"config”按钮,进行端口号的 ...

  2. RedHat6.5用ISO配置yum源

    CentOS自带强大的yum功能,默认为从网上自动下载rpm包,对于网速不太给力或者没有网络的情况下需要用的话就不是很方便,很多软件尤其是服务器上的软件我们么有必要追求最新,稳定性最重要,这里我们用C ...

  3. MongoDB入门实践

    MongoDB入门实践 简单介绍MongoDB,包括MongoDB的使用场景.和MySQL的对比.安装部署.Java客户端访问及总结 MongoDB? 我们遵循需求驱动技术的原则,通过一个场景来引入M ...

  4. 轻量级封装DbUtils&Mybatis之一概要

    Why 一时兴起,自以为是的对Jdbc访问框架做了一个简单的摸底,近期主要采用Mybatis,之前也有不少采用Dbutils,因此希望能让这两个框架折腾的更好用. DbUtils:非常简单的Jdbc访 ...

  5. Emacs golang用户代码无法补全问题

    现象:Emacs使用company-go可以正常补全标准库函数和go get安装库函数:而对于自已写的代码,只能补全当前包下的变量和函数. 原因:company-go后台是使用了gocode,而goc ...

  6. error: src refspec master does not match any.

    执行下面的命令,git push 时候出错: git push origin master 出现如下错误: error: src refspec master does not match any. ...

  7. GOF23设计模式之享元模式(flyweight)

    一.享元模式概述 内存属于稀缺资源,不要随便浪费.如果有很多个完全相同或相似的对象,可以通过享元模式,节省内存. 享元模式核心: (1)享元模式可以共享的.方式高效的支持大量细粒度对象的重用: (2) ...

  8. Array 数组类

    除了 Object 之外, Array 类型恐怕是 ECMAScript 中最常用的类型了.而且,ECMAScript 中的数组与其他多数语言中的数组有着相当大的区别.虽然 ECMAScript 数组 ...

  9. 二、jenkins配置email(以腾讯企业qq为例)

    废话不多说,直接上干货: 主要针对两个部分进行介绍: 1.jenkins内置的邮件功能: 2.Editable Email Notification插件的邮件功能: 低版本的jenkins有很多插件都 ...

  10. sublime text 怎么浏览包

    点击到设置里 里面有个包浏览.