“Code First Migrations ”工具【转】
在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构。
默认情况下,当您使用实体框架的“Code First Migrations ”工具,实体框架会自动创建一个数据库。“代码先行功能”首先会添加一个新表到数据库中,以便跟踪数据库的架构是否与模型类同步。如果它们不同步,实体框架会抛出一个错误。这样开发人员在开发时就能更容易地追查问题出在什么地方,而其他的开发方式就只能在运行时通过模糊的错误信息查找什么地方出错了。
一、设置代码优先迁移的模型更改
如果您使用的是Visual Studio 2012,从解决方案资源管理器中双击Test.mdf文件,会打开数据库管理工具。其中Visual Studio Express For Web版本的VS将显示数据库资源管理器,Visual Studio 2012其他版本会显示服务器资源管理器。如果您使用的是Visual Studio 2010中,使用SQL Server对象资源管理器。
1)在服务器资源管理器中—》“数据连接”中(数据库管理工具、数据库浏览器、服务器资源管理器或SQL Server对象资源管理器),右键单击developer\sqlexpress.Test.dbo,然后选择删除。如下图1、图2。图1是删除连接,图2是删除数据库。

图1

图2
2)执行菜单--》工具--》生成--》生成解决方案,以确保没有错误。
3)从菜单--》工具菜单中,单击库程序包管理器--》程序包管理器控制台。如下图。

4)在Visual Studio的下方窗体中的“程序包管理器控制台”窗口的“>”提示符下输入“Enable-Migrations -ContextTypeName MvcApplication1.Models.BookDBContext”。如下图。

5)在执行完Enable-Migrations命令之后(如上图所示),会在项目中创建一个新的文件夹“Migrations”, 在这个文件夹中创建一个Configuration.cs文件。如下图。

6)在Visual Studio中打开Configuration.cs文件。用下面的代码替换Configuration.cs文件的Send方法:

namespace MvcApplication1.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using MvcApplication1.Models;
internal sealed class Configuration : DbMigrationsConfiguration<MvcApplication1.Models.BookDBContext>
{
public Configuration()
{
AutomaticMigrationsEnabled = false;
}
protected override void Seed(MvcApplication1.Models.BookDBContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
context.Books.AddOrUpdate(i => i.BookID,
new Book
{
Name = "When Harry Met Sally",
PublishDate = DateTime.Parse("1989-1-11"),
Category = "MS",
AuthorID=1,
Numberofcopies=12,
Price = 7.99M
},
new Book
{
Name = "Ghostbusters ",
PublishDate = DateTime.Parse("1984-3-13"),
Category = "MS",
AuthorID=1,
Numberofcopies=112,
Price = 8.99M
},
new Book
{
Name = "DB 2",
PublishDate = DateTime.Parse("1986-2-23"),
Category = "IBM",
AuthorID=1,
Numberofcopies=22,
Price = 9.99M,
}
);
}
}
}

7)使用鼠标右键单击Book下的红色波浪线,在弹出菜单中选择“解析”菜单项,然后在弹出菜单中选择“MvcApplication1.Models”;如下图。

在经过这样做了之后,Visual Studio会自动在代码中增加using语句如下:
using MvcApplication1.Models;
在“程序包管理器控制台”窗口中执行了“Code First Migrations ”功能中的“迁移”命名之后,代码会自动调用Send 方法(即程序包管理器控制台会调用此方法更新数据库中的数据),并且执行该方法时如果代码中的对象数据不存在则插入,如果存在则进行更新。
二、迁移数据库
1) 如果此时在Visual Studio中按Ctrl-Shift-B(或者菜单-->生成-->生成解决方案)来编译项目,将会出现编译不了的错误。如下图。
2) 接下来要建立一个DbMigration类来进行初始迁移。使用这个迁移命名创建一个新的数据库,这就是为什么我在上一步中删除了Test.mdf文件。
3) 在程序包管理器控制台窗口中,输入命令“dd-migration Initial”创建初始迁移。其中“Initial”的命名是任意的,是用来命名新创建的迁移文件。如下图。

4)“Code First Migrations ”功能中的“迁移”命名会在迁移文件夹中的创建一个新的类文件(名为{DATESTAMP}_Initial.cs),而且这个类中已经包含了创建数据库架构的代码。迁移文件名的命名规则中有一个固定的时间戳,用以帮助排序。检查{DATESTAMP}_Initial.cs文件,它包含了创建Books表的数据库的说明。这个{DATESTAMP}_Initial.cs文件将运行并创建数据库架构。然后运行Send方法为数据库填充测试数据。
5) 在程序包管理器控制台,输入命令“update-database”来创建数据库,并执行Send方法。如下图1,图2。

图1

图2
如果你得到一个错误,指示表已经存在,不能被创建,它可能是因为你正在运行应用程序,在你删除了数据库之后,执行更新数据库之前。(如上图1)。
在这种情况下,再次删除Test.mdf文件,然后重试“update-database”命令。如上图2。如果仍然出现错误,请删除该文件夹和内容,然后开始在这个页面的顶部(也就是删除Test.mdf文件然后进行启用,迁移)的说明。
6) 按F5运行应用程序,在浏览器中浏览Books/Index网址。会显示Send方法中填充到数据库中的数据。如下图。

“Code First Migrations ”工具【转】的更多相关文章
- 学习ASP.NET MVC(九)——“Code First Migrations ”工具使用示例
在上一篇文章中,我们学习了如何使用实体框架的“Code First Migrations ”工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 在本文章中,我们将使用“ ...
- 学习ASP.NET MVC(八)——“Code First Migrations ”工具
在本篇文章中,我们学习如何使用实体框架的“Code First Migrations ”(也称为代码先行功能)工具,使用其中的“迁移”功能对模型类进行一些修改,同时同步更新对应数据库的表结构. 默认情 ...
- EF Code First Migrations数据库迁移
1.EF Code First创建数据库 新建控制台应用程序Portal,通过程序包管理器控制台添加EntityFramework. 在程序包管理器控制台中执行以下语句,安装EntityFramewo ...
- Code First Migrations 数据迁移小记
用了codefirst后一个很大的问题就是代码中的属性字段与数据库中表的同步问题,删掉数据库重新生成当然可以解决,不过数据就丢失了(当然通过代码中初始化数据库添加数据也可以解决,初始化的任务可以通过重 ...
- 15个最佳的代码评审(Code Review)工具
代码评审可以被看作是计算机源代码的测试,它的目的是查找和修复引入到开发阶段的应用程序的错误,提高软件的整体素质和开发者的技能.代码审查程序以各种形式,如结对编程,代码抽查等.在这个列表中,我们编制了1 ...
- 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 ...
随机推荐
- [转]Linux学习
Linux简介与厂商版本 http://www.cnblogs.com/vamei/archive/2012/09/04/2671103.html Linux开机启动(bootstrap) http: ...
- BZOJ 2763: [JLOI2011]飞行路线 【分层图模板】
任意门:https://www.lydsy.com/JudgeOnline/problem.php?id=2763 2763: [JLOI2011]飞行路线 Time Limit: 10 Sec M ...
- 百度提供的LBS服务
并不是所有 LBS 云服务 都可以使用 js Ajax 访问,涉及跨域问题 (Jsonp 方式解决)Jsonp 解决跨域问题原理,在页面生成<script> 加载远程 js 代码片段.在L ...
- 随便扯扯React生命周期 --《爱看不看系列》
生命周期嘛,顾名思义,就是说组件这辈子从生下来到死掉经历的事情.先来看看一张图片,温故温故,如图: 你会发现有些周期的名字都能找出点规律,我找到的规律是凡是 Will 字母的,表示该钩子函数会在该生命 ...
- 四、IntelliJ IDEA 之 HelloWorld 项目创建及相关配置文件介绍
咱们通过创建一个 Static Web 项目大致了解了 IntelliJ IDEA 的使用界面,接下来,趁着这个热乎劲,咱们来创建第一个 Java 项目“HelloWorld”,进入如下界面: 如上图 ...
- 【luogu P1402 酒店之王】 题解
题目链接:https://www.luogu.org/problemnew/show/P1402 菜 #include <queue> #include <cstdio> #i ...
- py faster rcnn+ 1080Ti+cudnn5.0
看了py-faster-rcnn上的issue,原来大家都遇到各种问题. 我要好好琢磨一下,看看到底怎么样才能更好地把GPU卡发挥出来.最近真是和GPU卡较上劲了. 上午解决了g++的问题不是. 然后 ...
- 在cengos中安装zabbix server/agent, 并创建一个简单demo
添加zabbix更新源 rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch ...
- python学习笔记--数据类型
Life is short, You need Python! 霸气的口号! 今天我也开始学python了,毕竟不懂后端的前端不是好前端.之前有过‘世界上最好的语言’和JavaScript的学习经验. ...
- Struts-Core jar包
密码t6mp https://pan.baidu.com/share/init?surl=E--zExzI9-VY1zaT8F9i9w