在本篇文章中,我们学习如何使用实体框架的“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=,

            Numberofcopies=,

            Price = 7.99M

        },

         new Book

         {

             Name = "Ghostbusters ",

             PublishDate = DateTime.Parse("1984-3-13"),

              Category = "MS",

            AuthorID=,

            Numberofcopies=,

             Price = 8.99M

         },

         new Book

         {

             Name = "DB 2",

             PublishDate = DateTime.Parse("1986-2-23"),

               Category = "IBM",

            AuthorID=,

            Numberofcopies=,

             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方法中填充到数据库中的数据。如下图。

学习ASP.NET MVC(八)——“Code First Migrations ”工具的更多相关文章

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

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

  2. 学习ASP.NET MVC(七)——我的第一个ASP.NET MVC 查询页面

    在本篇文章中,我将添加一个新的查询页面(SearchIndex),可以按书籍的种类或名称来进行查询.这个新页面的网址是http://localhost:36878/Book/ SearchIndex. ...

  3. 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序

    学习ASP.NET MVC系列: 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)——我的第一个ASP.NET MVC 控制器 学习ASP ...

  4. 学习ASP.NET MVC(十一)——分页

    在这一篇文章中,我们将学习如何在MVC页面中实现分页的方法.分页功能是一个非常实用,常用的功能,当数据量过多的时候,必然要使用分页.在今天这篇文章中,我们学习如果在MVC页面中使用PagedList. ...

  5. 学习ASP.NET MVC系列 - 还有比这更简炼的吗?把复杂的事情变简单了,贡献啊!

    转自

  6. 从零开始学习ASP.NET MVC 1.0

    转自:http://www.cnblogs.com/zhangziqiu/archive/2009/02/27/ASPNET-MVC-1.html <从零开始学习ASP.NET MVC 1.0& ...

  7. 系列文章--从零开始学习ASP.NET MVC 1.0

    从零开始学习ASP.NET MVC 1.0 (一) 开天辟地入门篇 从零开始学习 ASP.NET MVC 1.0 (二) 识别URL的Routing组件 从零开始学习 ASP.NET MVC 1.0 ...

  8. “Code First Migrations ”工具【转】

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

  9. IoC容器Autofac - Autofac + Asp.net MVC + EF Code First(转载)

    转载地址:http://www.cnblogs.com/JustRun1983/archive/2013/03/28/2981645.html  有修改 Autofac通过Controller默认构造 ...

随机推荐

  1. jquery实现手风琴效果

    html----accordion.html <!DOCTYPE html> <html lang="en"> <head> <meta ...

  2. [UCSD白板题] The Last Digit of a Large Fibonacci Number

    Problem Introduction The Fibonacci numbers are defined as follows: \(F_0=0\), \(F_1=1\),and \(F_i=F_ ...

  3. <Oracle Database>后台进程

    进程监视器进程(PMON)  这个进程负责在出现异常中止的连接之后完成清理.PMON会回滚未提交的工作,并释放为失败进程分配的SGA资源.PMON还负责监视其他的Oracle后台进程,并在必要时(如果 ...

  4. Linux内核分析之扒开系统调用的三层皮(下)

    一.实验内容 1. 通过内核的方式使用系统调用 需要使用的命令 rm menu -rf //强制删除当前menugit clone http://github.com/mengning/menu.gi ...

  5. MATLAB不运行也不报错

    今天本来挺激动找到能运行的好几个程序 MATLAB忙到busy也是停不下来 本来不以为然 结果呢 吃了个水果 一杯水都喝下去了 还没结果(⊙o⊙) 这时候解决办法只有一个 Ctrl+c

  6. vim : 依赖: vim-common (= 2:7.3.429-2ubuntu2.1) 但是

    Ubuntu 12.10 安装vim出错[日期:2013-01-18] 来源:Linux社区 作者:Cubernet [字体:大 中 小] 在Ubuntu 12.10中安装vim时出现了如下提示:正在 ...

  7. 工作当中实际运用(3)——js原生实现鼠标点击弹出div层 在点击隐藏

    function onmou(){ var divs=document.getElementById('kefuDV');//获取到你要操作的div if (divs.style.display==& ...

  8. 解剖SQLSERVER 第十二篇 OrcaMDF 行压缩支持(译)

    解剖SQLSERVER 第十二篇   OrcaMDF 行压缩支持(译) http://improve.dk/orcamdf-row-compression-support/ 在这两个月的断断续续的开发 ...

  9. [Asp.net 开发系列之SignalR篇]专题二:使用SignalR实现酷炫端对端聊天功能

    一.引言 在前一篇文章已经详细介绍了SignalR了,并且简单介绍它在Asp.net MVC 和WPF中的应用.在上篇博文介绍的都是群发消息的实现,然而,对于SignalR是为了实时聊天而生的,自然少 ...

  10. Windows Server 2008更改远程桌面端口号

    windows 2008远程桌面端口默认是用的是3389端口,但是由于安全考虑,经常我们安装好系统后一般都会考虑把原来的3389端口更改为另外的端口. 更改过程: 打开注册表: 运行regedit 找 ...