在本节中,您将使用Entity Framework Code First来实现模型类上的操做。从而使得这些操做和变动,能够应用到数据库中。html
默认状况下,就像您在以前的教程中所做的那样,使用 Entity Framework Code First自动建立一个数据库,Code First为数据库所添加的表,将帮助您跟踪数据库是否和从它生成的模型类是同步的。若是他们不是同步的,Entity Framework将抛出一个错误。这很是方便的在开发时就能够发现错误,不然您可能会在运行时才发现这个问题。 (由一个晦涩的错误信息,才发现这个问题。)数据库
若是您使用的是 Visual Studio 2012,从解决方案资源管理器中双击Movies.mdf,打开数据库工具。Visual Studio Express for Web将显示数据库资源管理器,Visual Studio 2012 将显示服务器资源管理器。若是您使用的是Visual Studio 2010,请使用 SQL Server对象资源管理器。浏览器
在数据库工具 (数据库资源管理器、 服务器资源管理器或 SQL Server对象资源管理器),右键单击MovieDBContext
,并选择删除以删除电影数据库。服务器
返回到解决方案资源管理器。在Movies.mdf文件上右键单击,并选择删除以删除电影数据库。mvc
Build应用程序,以确保没有任何编译错误。asp.net
从工具菜单上,单击库包管理器,而后点击程序包管理器控制台.工具
在 软件包管理器控制台 窗口中PM> 提示符下输入"Enable-Migrations �ContextTypeName MvcMovie.Models.MovieDBContext"。学习
(如上所示)Enable-Migrations命令会在Migrations文件夹中建立一个Configuration.cs文件。开发工具
在Visual Studio 中打开Configuration.cs文件。把Configuration.cs文件中的Seed方法,替换为下面的代码:测试
在Movie下面出现的红色波浪线上右键单击,并选择Resolve而后点击usingMvcMovie.Models;
这样作以后,将添加如下的 using语句:
每次Code First Migrations 会调用Seed 方法(即,在程序包管理器控制台中调用update-database),而且这次调用会更新行:更新已经插入的行,或把不存在的行也插入。
按 CTRL-SHIFT-B 来Build工程。(若是这次Build不成功,如下的步骤将会失败。)
下一步是建立一个DbMigration
类,用于初始化数据库迁移。此迁移类将建立新的数据库,这也就是为何在以前的步骤中你要删除movie.mdf
文件。
在软件包管理器控制台窗口中,输入"add-migration Initial"命令来建立初始迁移。" Initial" 的名称是任意,是用于建立迁移文件的名称。
Code First Migrations将会在Migrations文件夹中建立另外一个类文件 (文件名为: {DateStamp}_Initial.cs ),此类中包含的代码将建立数据库的Schema。迁移文件名使用时间戳做为前缀,以帮助用来排序和查找。查看{DateStamp}_Initial.cs文件,它包含了为电影数据库建立电影表的说明。当您更新数据库时,{DateStamp}_Initial.cs文件将会被运行并建立 DB 的Schema。而后Seed方法将运行,用来填充 DB 的测试数据。
在软件包管理器控制台中,输入命令" update-database ",建立数据库并运行Seed方法。
若是您收到表已经存在而且没法建立的错误,多是由于您已经删除了数据库,而且在执行update-database
以前,您运行了应用程序。在这种状况下,再次删除Movies.mdf文件,而后重试update-database
命令。若是您仍遇到错误,删除Migration文件夹及其内容,而后从头开始重作。(即删除Movies.mdf文件,而后再进行Enable-Migrations)
运行该应用程序,而后浏览URL /Movies Seed数据显示以下:
给现有的Movie
类,添加新的Rating
属性。打开Models\Movie.cs文件并添加以下Rating
属性:
public string Rating { get; set; }
完整的Movie
类以下:
Build 应用程序 Build>Build Move或CTRL-SHIFT-B.
如今,您已经更新了Model
类,您还须要更新\Views\Movies\Index.cshtml和\Views\Movies\Create.cshtml视图模板,以便能在浏览器中显示新的Rating
属性。
打开\Views\Movies\Index.cshtml文件,在Price列后面添加<th>Rating</th>
的列头。而后添加一个<td>
列来显示@item.Rating
的值。下面是更新的Index.cshtml视图模板:
下一步,打开\Views\Movies\Create.cshtml文件,并在form标签结束处的附近添加以下代码。您能够在建立新的电影时指定一个电影等级。
如今,您已经更新应用程序代码以支持了新的Rating
属性。
如今运行该应用程序,而后浏览 /Movies的 URL。然而,当您这样作时,您将看到如下之一的错误信息:
你如今看到此错误,由于在应用程序中,最新的Movie
模型类和现有的数据库Movie
表的Schema不一样。(数据库表中,没有Rating
列。)
咱们将使用Code First Migrations 来解决这一问题。
更新Seed方法,以便它能为新的列提供一个值。打开 Migrations\Configuration.cs 文件,并将Rating 字段添加到影片的每一个对象。
new Movie { Title = "When Harry Met Sally", ReleaseDate = DateTime.Parse("1989-1-11"), Genre = "Romantic Comedy", Rating = "G", Price = 7.99M },
Build解决方案,而后打开 软件包管理器控制台 窗口,并输入如下命令:
add-migration AddRatingMig
add-migration
命令告诉migration framework,来检查当前电影模型与当前的影片 DB Schema并建立必要的代码以将数据库迁移到新的模型。AddRatingMig 是一个任意的文件名参数,用于命名migration文件。它将有助于使得迁移步骤成为一个有意义的名字。
当命令完成后,用Visual Studio 打开类文件,新继承自DbMIgration
类的定义,并在Up
方法中,您能够看到建立新列的代码:
Build解决方案,而后在 程序包管理器控制台 窗口中输入"update-database"命令。
下面的图片显示了 程序包管理器控制台 窗口的输出 (AddRatingMig 的前缀时间戳将有所不一样)。
从新运行应用程序,而后浏览 /Movies 的 URL。您能够看到新的评级字段。
单击CreateNew连接来添加一部新电影。注意,请您能够为电影添加评级。
单击Create。新的电影,包括评级,将显示在电影列表中:
此外您也应该把Rating
字段添加到编辑、 详细信息和 SearchIndex 的视图模板中。
您能够再次在 程序包管理器控制台 窗口中输入"update-database"命令,将不会有任何新的变化,由于数据库Schema 和模型类如今是匹配的。
在本节中,您看到了如何修改模型对象并始终保持其和数据库Schema的同步。您还学习了使用填充示例数据来建立新数据库的例子,您能够反复尝试。接下来,让咱们看看如何将丰富的验证逻辑添加到模型类,并对模型类执行一些强制的业务规则验证。相信有了本节如何修改模型对象并始终保持其和数据库Schema同步的内容介绍,你们会对MVC的理解又加深一步。后面若是要进行ASP.ET MVC的开发,在具有MVC的知识的同时,还能够借助一些开发工具。使用 ComponentOne Studio ASP.NET MVC 这款轻量级控件,能够助力你的MVC开发过程。
--------------------------------------------------------------------------------------------------------------------
译者注:
本系列共9篇文章,翻译自Asp.Net MVC4 官方教程,因为本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,很是适合新手入门Asp.Net MVC4,并由此开始开发工做。9篇文章为:
1. Asp.Net MVC4 入门介绍
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4
・ 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/01/2749906.html
2. 添加一个控制器
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller
・ 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/02/2751015.html
3. 添加一个视图
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view
・ 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/11/06/2756711.html
4. 添加一个模型
・ 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model
・ 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2012/12/17/2821495.html
5. 从控制器访问数据模型
・ 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html
6. 验证编辑方法和编辑视图
・ 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html
7. 给电影表和模型添加新字段
・ 译文地址:http://powertoolsteam.blog.51cto.com/2369428/1140334
8. 给数据模型添加校验器
・ 译文地址:http://powertoolsteam.blog.51cto.com/2369428/1147449
9. 查询详细信息和删除记录
・ 译文地址:http://powertoolsteam.blog.51cto.com/2369428/1149311
10.第三方控件Studio for ASP.NET Wijmo MVC4 工具应用