在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这些操作和变更,可以应用到数据库中。
默认情况下,就像您在之前的教程中所作的那样,使用 Entity Framework Code First自动创建一个数据库,Code First为数据库所添加的表,将帮助您跟踪数据库是否和从它生成的模型类是同步的。如果他们不是同步的,Entity Framework将抛出一个错误。这非常方便的在开发时就可以发现错误,否则您可能会在运行时才发现这个问题。 (由一个晦涩的错误信息,才发现这个问题。)
给现有的Movie
类,添加新的Rating
属性。打开ModelsMovie.cs文件并添加如下Rating
属性:
public string Rating { get; set; }
完整的Movie
类如下:
public class Movie { public int ID { get; set; } public string Title { get; set; } public DateTime ReleaseDate { get; set; } public string Genre { get; set; } public decimal Price { get; set; } public string Rating { get; set; } }
Build 应用程序 Build>Build Move或CTRL-SHIFT-B.
现在,您已经更新了Model
类,您还需要更新ViewsMoviesIndex.cshtml和ViewsMoviesCreate.cshtml视图模板,以便能在浏览器中显示新的Rating
属性。
打开ViewsMoviesIndex.cshtml文件,在Price列后面添加<th>Rating</th>
的列头。然后添加一个<td>
列来显示@item.Rating
的值。下面是更新的Index.cshtml视图模板:
@model IEnumerable<MvcMovie.Models.Movie> @{ ViewBag.Title = "Index"; }
Index
@Html.ActionLink("Create New", "Create")
@Html.DisplayNameFor(model => model.Title) | @Html.DisplayNameFor(model => model.ReleaseDate) | @Html.DisplayNameFor(model => model.Genre) | @Html.DisplayNameFor(model => model.Price) | @Html.DisplayNameFor(model => model.Rating) | |
---|---|---|---|---|---|
@Html.DisplayFor(modelItem => item.Title) | @Html.DisplayFor(modelItem => item.ReleaseDate) | @Html.DisplayFor(modelItem => item.Genre) | @Html.DisplayFor(modelItem => item.Price) | @Html.DisplayFor(modelItem => item.Rating) | @Html.ActionLink("Edit", "Edit", new { id=item.ID }) | @Html.ActionLink("Details", "Details", new { id=item.ID }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID }) |
下一步,打开ViewsMoviesCreate.cshtml文件,并在form标签结束处的附近添加如下代码。您可以在创建新的电影时指定一个电影等级。
现在,您已经更新应用程序代码以支持了新的Rating
属性。
现在运行该应用程序,然后浏览 /Movies的 URL。然而,当您这样做时,您将看到以下之一的错误信息:
你现在看到此错误,因为在应用程序中,最新的Movie
模型类和现有的数据库Movie
表的Schema不同。(数据库表中,没有Rating
列。)
我们将使用Code First Migrations 来解决这一问题。
更新Seed方法,以便它能为新的列提供一个值。打开 MigrationsConfiguration.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
方法中,您可以看到创建新列的代码:
public partial class AddRatingMig : DbMigration{ public override void Up() { AddColumn("dbo.Movies", "Rating", c => c.String()); } public override void Down() { DropColumn("dbo.Movies", "Rating"); }}
Build解决方案,然后在 程序包管理器控制台 窗口中输入"update-database"命令。
下面的图片显示了 程序包管理器控制台 窗口的输出 (AddRatingMig 的前缀时间戳将有所不同)。
重新运行应用程序,然后浏览 /Movies 的 URL。您可以看到新的评级字段。
单击CreateNew链接来添加一部新电影。注意,请您可以为电影添加评级。
单击Create。新的电影,包括评级,将显示在电影列表中:
此外您也应该把Rating
字段添加到编辑、 详细信息和 SearchIndex 的视图模板中。
您可以再次在 程序包管理器控制台 窗口中输入"update-database"命令,将不会有任何新的变化,因为数据库Schema 和模型类现在是匹配的。
在本节中,您看到了如何修改模型对象并始终保持其和数据库Schema的同步。您还学习了使用填充示例数据来创建新数据库的例子,您可以反复尝试。接下来,让我们看看如何将丰富的验证逻辑添加到模型类,并对模型类执行一些强制的业务规则验证。
译者注:
本系列共9篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Net MVC4,并由此开始开发工作。9篇文章为:
- 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
- 添加一个控制器
· 原文地址: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
- 添加一个视图
· 原文地址: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
- 添加一个模型
· 原文地址: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
- 从控制器访问数据模型
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/11/2855935.html
- 验证编辑方法和编辑视图
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/01/24/2874622.html
- 给电影表和模型添加新字段
· 译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/02/26/2933105.html
- 给数据模型添加校验器
· 译文地址:
- 查询详细信息和删除记录
· 译文地址: