需求

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

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

EntityFramework迁移命令

Enable-Migrations  启用迁移

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

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

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

DEMO

  Model中的原类型

class Student
{
public int ID { get; set; }
public int Name { get; set; }
}

更新后

class Student
{
public int ID { get; set; }
public int Name { get; set; }
public int Age{get;set;}
}

在程序控制台中输入:

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

// 将挂起的迁移更新到数据库
// 参数:
// -SourceMigration: 指定迁移的名称作用更新的起点,默认使用最后一次应用的迁移
// -TargetMigration: 指定将数据库更新到哪个迁移名称
// -Script:生成SQL脚本
// -Force: 重写迁移配置
// -ProjectName:存放DBContext的项目名称
// -StartProjectName: 解决方案中的启动项目名称
// -ConfigurationTypeName: 使用指定的配置
// -ConnectionStringName: 使用指定的连接字符串名称
// -ConnectionString: 使用指定的连接字符串
// -ConnectionProviderName: 指定连接字符串的provider名称 可能会出现的错误

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

 

应用程序启动后自动升级

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

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

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

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

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

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. Jmeter接口压测小思路

    1.压力接口测试分2种:一种是单场景,压一个接口:第二种是混合场景,多个有关联的接口.压测时间,一般场景都运行10-15分钟.如果是疲劳测试,可以压一天或一周,根据实际情况定. 2.压测前要明确压测功 ...

  2. jdk1.8新特性之lambda表达式

    lambda表达式其实就是指一个匿名函数,应用最广泛的就是匿名内部类的简化.在jdk1.8之前,我们定义一个匿名内部类可能需要写一大坨代码,现在有了lambda之后,可以写的很简洁了.但不是说lamb ...

  3. MOSS 2013研究系列---列表的资源限制

    MOSS2010 以后,对列表的条目数做了一些限制,大量的将数据存储在列表中,会降低列表的运行效能,因此,MOSS中对列表默认有了一个阀值,默认是5000条数据,当你存储的数据多余5000条的时候,用 ...

  4. rapidjson的read和write的sample

    头文件 #include "json/document.h" #include "json/prettywriter.h" #include "jso ...

  5. HttpClient使用示例

    1)使用HttpClient发送GET请求 public class MainActivity extends Activity implements OnClickListener { privat ...

  6. [转][Java]Maven使用阿里云镜像

    本文来自:http://www.cnblogs.com/justforcon/p/6792039.html <settings xmlns="http://maven.apache.o ...

  7. SVN的学习

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,相较于CVS,它采用了分支管理系统,它的设计目标就是取代CVS 为什么需要SVN 通常软件开发由多人协作开发,如果对代码文件.配置文 ...

  8. 记录AUTO_SPACE_ADVISOR_JOB导致负载异常

    早上上班,检查数据库,发现监控日志中在晚上1点到4点钟服务器异常负载现象,查看awr日志发现AUTO_SPACE_ADVISOR_JOB运行异常0.数据库版本 SQL> select * fro ...

  9. hdu1010 Tempter of the Bone(深搜+剪枝问题)

    Tempter of the Bone Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission( ...

  10. SVN专题(Visual SVN Server + TortoiseSVN + Visual SVN)

    参考资料: 1.Windows环境下搭建SVN服务器.原文地址:https://blog.csdn.net/lu1024188315/article/details/74082227 2.Git|SV ...