Code First Migrations
在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的更多相关文章
- EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- Code First Migrations 数据迁移小记
用了codefirst后一个很大的问题就是代码中的属性字段与数据库中表的同步问题,删掉数据库重新生成当然可以解决,不过数据就丢失了(当然通过代码中初始化数据库添加数据也可以解决,初始化的任务可以通过重 ...
- 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例
在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...
- 学习ASP.NET MVC(八)——“Code First Migrations ”工具
在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情 ...
- Code First Migrations: Making __MigrationHistory not a system table
https://blog.oneunicorn.com/2012/02/27/code-first-migrations-making-__migrationhistory-not-a-system- ...
- Model backing a DB Context has changed; Consider Code First Migrations
Model增加一个字段,数据库对应的也手动添加了字段但是运行时报错 The model backing the 'TopLogDbContext' context has changed since ...
- Code First Migrations更新数据库结构的具体步骤
一.打开程序包管理器控制台 当你的实体模型与数据库架构不一致时,引发以下错误:The model backingthe 'SchoolContext' context has changed sinc ...
- 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 ...
- 转载Code First Migrations更新数据库架构的具体步骤
[转载] Code First Migrations更新数据库结构的具体步骤 我对 CodeFirst 的理解,与之对应的有 ModelFirst与 DatabaseFirst ,三者各有千秋,依项 ...
- Entity Framework Code First -- Migrations 迁移
在开始使用迁移(Migrations)之前,我们需要一个 Project 和一个 Code First Model, 对于本文将使用典型的 Blog 和 Post 模型 创建一个新的控制台应用程序 M ...
随机推荐
- ASP.NET Core 中文文档 第四章 MVC(3.8)视图中的依赖注入
原文:Dependency injection into views 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:孟帅洋(书缘) ASP.NET Core 支持在视图中使用 依赖 ...
- JS正则表达式常用总结
正则表达式的创建 JS正则表达式的创建有两种方式: new RegExp() 和 直接字面量. //使用RegExp对象创建 var regObj = new RegExp("(^\\s+) ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-Web打印
系列目录 前言 1.本次主要弥补工作流,用户表单数据的打印 2.使用JQprint做为web打印插件 3.兼容:FireFox,Chrome,IE. 4.没有依赖也没有配置,使用简单 代码下载:htt ...
- Android探索之AIDL实现进程间通信
前言: 前面总结了程序间共享数据,可以使用ContentProvider也可以使用SharedPreference,那么进程间怎么共享内存呢?Android系统中的进程之间不能共享内存,因此,需要提供 ...
- [C#] C# 知识回顾 - 表达式树 Expression Trees
C# 知识回顾 - 表达式树 Expression Trees 目录 简介 Lambda 表达式创建表达式树 API 创建表达式树 解析表达式树 表达式树的永久性 编译表达式树 执行表达式树 修改表达 ...
- Asp.Net WebApi核心对象解析(上篇)
生活需要自己慢慢去体验和思考,对于知识也是如此.匆匆忙忙的生活,让人不知道自己一天到晚都在干些什么,似乎每天都在忙,但又好似不知道自己到底在忙些什么.不过也无所谓,只要我们知道最后想要什么就行.不管怎 ...
- ASP.NET Core 中文文档目录
翻译计划 五月中旬 .NET Core RC2 如期发布,我们遂决定翻译 ASP.NET Core 文档.我们在 何镇汐先生. 悲梦先生. 张仁建先生和 雷欧纳德先生的群中发布了翻译计划招募信息,并召 ...
- Visual Studio Code——Angular2 Hello World 之 2.0
最近看到一篇用Visual Studio Code开发Angular2的文章,也是一篇入门教程,地址为:使用Visual Studio Code開發Angular 2專案.这里按部就班的做了一遍,感觉 ...
- NSStringCompareOptions
typedefNS_OPTIONS(NSUInteger, NSStringCompareOptions) { NSCaseInsensitiveSearch = 1, //不区分大小写比较 N ...
- MySQL 优化之 MRR (Multi-Range Read:二级索引合并回表)
MySQL5.6中引入了MRR,专门来优化:二级索引的范围扫描并且需要回表的情况.它的原理是,将多个需要回表的二级索引根据主键进行排序,然后一起回表,将原来的回表时进行的随机IO,转变成顺序IO.文档 ...