在MVC开发当中难免会对类进行修改,修改后再次运行就会出现异常,提示上下文的模型已在数据库创建后发生改变。

支持“AppContext”上下文的模型已在数据库创建后发生更改。请考虑使用 Code First 迁移更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

如果是项目初期开发倒是好办,可以删掉数据库重新建立,但是如果项目已经运行了,我想你不会想初期那样做吧,会照成数据丢失的。这个时候就需要使用EF的数据迁移功能了,下面教你如何使用数据迁移。

启用迁移

打开VS,工具>库程序包管理器>程序包管理器控制台。

在控制台中输入Enable-Migrations(不分大小写),如下图所示

输入这个命令后还会在项目中创建Migrations文件夹,里面包含两个文件

  • Configuration.cs  这个类允许你自己配置对AppContext上下文迁移的行为。比如添加一些数据的初始化操作,例如:

    context.Blogs.AddOrUpdate(
    p => p.Title,
    new Blog { Title = "测试标题1", Content = "内容1" },
    new Blog { Title = "测试标题2", Content = "内容2" }
    );
  • 201403310555286_InitialCreate.cs,这个文件名是由 时间戳+下划线+ Initial.cs组成的,这个类包含了创建数据库架构的代码。

生成和运行迁移

Code First的数据迁移有两个命令:

  • Add-Migration      对比当前数据库和模型的差异,生成相应的代码,使数据库和模型匹配的。
  • Update-Database  将任何挂起的迁移到数据库。

在控制台中输入Add-Migration AddBlogCreate,回车运行.

AddBlogCreate 是可以随意取的,是EF进行数据迁移的一个标识,为了更好知道这次迁移是干什么的最好取有意义的名称。命令运行完后,打开新添加的201403310649014_AddBlogCreate类,在Up方法里面可以看到添加新列的代码。

public partial class AddBlogCreate : DbMigration
{
public override void Up()
{
AddColumn("dbo.Blogs", "CreateTime", c => c.DateTime(nullable: false));
} public override void Down()
{
DropColumn("dbo.Blogs", "CreateTime");
}
}

在程序包管理器控制台运行Update-Database 提交到数据库,在数据库中你将会看到新增的CreateTime列.而且在Configuration类中的send方法也会执行。

迁移到一个特定的版本(包括降级)

在程序包管理器控制台中运行Update-Database –TargetMigration: AddBlogCreate,数据库将还原到新增CreateTime属性的时候。

启用自动迁移

如果你想你部署的应用程序在启动的时候自动升级数据库,你可以通过注册数据库初始化MigrateDatabaseToLatestVersion做到这一点。

将Configuration构造函数的设置为:AutomaticMigrationsEnabled=true,AutomaticMigrationDataLossAllowed=true.

public Configuration() {
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}

在Global.asax的 Application_Start 方法中添加以下代码:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<AppContext, Configuration>()); 

参考:

http://msdn.microsoft.com/en-us/data/jj591621

Code First Migrations的更多相关文章

  1. EF Code First Migrations数据库迁移

    1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...

  2. Code First Migrations 数据迁移小记

    用了codefirst后一个很大的问题就是代码中的属性字段与数据库中表的同步问题,删掉数据库重新生成当然可以解决,不过数据就丢失了(当然通过代码中初始化数据库添加数据也可以解决,初始化的任务可以通过重 ...

  3. 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例

    在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...

  4. 学习ASP.NET MVC(八)——“Code First Migrations ”工具

    在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情 ...

  5. Code First Migrations: Making __MigrationHistory not a system table

    https://blog.oneunicorn.com/2012/02/27/code-first-migrations-making-__migrationhistory-not-a-system- ...

  6. Model backing a DB Context has changed; Consider Code First Migrations

    Model增加一个字段,数据库对应的也手动添加了字段但是运行时报错 The model backing the 'TopLogDbContext' context has changed since ...

  7. Code First Migrations更新数据库结构的具体步骤

    一.打开程序包管理器控制台 当你的实体模型与数据库架构不一致时,引发以下错误:The model backingthe 'SchoolContext' context has changed sinc ...

  8. ASP.NET MVC 学习6、学习使用Code First Migrations功能,把Model的更新同步到DB中

     参考:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-th ...

  9. 转载Code First Migrations更新数据库架构的具体步骤

    [转载] Code First Migrations更新数据库结构的具体步骤 我对 CodeFirst 的理解,与之对应的有 ModelFirst与  DatabaseFirst ,三者各有千秋,依项 ...

  10. Entity Framework Code First -- Migrations 迁移

    在开始使用迁移(Migrations)之前,我们需要一个 Project 和一个 Code First Model, 对于本文将使用典型的 Blog 和 Post 模型 创建一个新的控制台应用程序 M ...

随机推荐

  1. ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入

    原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...

  2. JS正则表达式常用总结

    正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...

  3. ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-Web打印

    系列目录 前言 1.本次主要弥补工作流,用户表单数据的打印 2.使用JQprint做为web打印插件 3.兼容:FireFox,Chrome,IE. 4.没有依赖也没有配置,使用简单 代码下载:htt ...

  4. Android探索之AIDL实现进程间通信

    前言: 前面总结了程序间共享数据,可以使用ContentProvider也可以使用SharedPreference,那么进程间怎么共享内存呢?Android系统中的进程之间不能共享内存,因此,需要提供 ...

  5. [C#] C# 知识回顾 - 表达式树 Expression Trees

    C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...

  6. Asp.Net WebApi核心对象解析(上篇)

    生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...

  7. ASP.NET Core 中文文档目录

    翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...

  8. Visual Studio Code——Angular2 Hello World 之 2.0

    最近看到一篇用Visual Studio Code开发Angular2的文章,也是一篇入门教程,地址为:使用Visual Studio Code開發Angular 2專案.这里按部就班的做了一遍,感觉 ...

  9. NSStringCompareOptions

    typedefNS_OPTIONS(NSUInteger, NSStringCompareOptions) { NSCaseInsensitiveSearch = 1,    //不区分大小写比较 N ...

  10. MySQL 优化之 MRR (Multi-Range Read:二级索引合并回表)

    MySQL5.6中引入了MRR,专门来优化:二级索引的范围扫描并且需要回表的情况.它的原理是,将多个需要回表的二级索引根据主键进行排序,然后一起回表,将原来的回表时进行的随机IO,转变成顺序IO.文档 ...