手机版

ASP.NET MVC 4简介(7):为电影表格和模型添加新字段

时间:2021-11-04 来源:互联网 编辑:宝哥软件园 浏览:

在本节中,您将使用实体框架代码优先来实现模型类上的操作。以便将这些操作和更改应用于数据库。

默认情况下,就像您在前面的教程中所做的那样,数据库是通过使用实体框架代码优先自动创建的,代码优先添加到数据库中的表将帮助您跟踪数据库是否与从中生成的模型类同步。如果实体框架不同步,则会引发错误。在开发过程中发现错误非常方便,否则在运行时可能会发现这个问题。(此问题是由一条模糊的错误消息发现的。)

为对象模型的更改设置代码优先迁移。

如果您使用的是Visual Studio 2012,请从解决方案资源管理器中双击Movies.mdf以打开数据库工具。Visual Studio Express for Web将显示数据库浏览器,Visual Studio 2012将显示服务器浏览器。如果您使用的是Visual Studio 2010,请使用SQL Server对象资源管理器。

在数据库工具(数据库资源管理器、服务器资源管理器或SQL Server对象资源管理器)中,右键单击电影上下文并选择删除以删除电影数据库。

返回到解决方案资源管理器。右键单击电影. mdf文件,然后选择删除以删除电影数据库。

构建应用程序以确保没有编译错误。

从“工具”菜单中,单击“库包管理器”,然后单击“包管理器控制台”。

在包管理器控制台窗口的PM提示符下输入“enable-migrationscontexttypename mvcmovie . models . moviedbcontext”。

(如上所示)启用-迁移命令在迁移文件夹中创建一个Configuration.cs文件。

在Visual Studio中打开Configuration.cs文件。用以下代码替换Configuration.cs文件中的Seed方法:

受保护的覆盖无效种子。Models.MovieDBContext上下文){ context。电影。添加日期(i=i.Title,新电影{ Title='当哈利遇见莎莉',ReleaseDate=DateTime。解析(' 1989-1-11 '),类型='浪漫喜剧',价格=7.99百万},新电影{ Title='捉鬼敢死队',ReleaseDate=DateTime。解析(' 1984-3-13 '),类型='喜剧',价格=8.99百万},新电影{ Title='捉鬼敢死队2 ',发行日期=日期时间。解析(' 1986-2-23 '),流派='喜剧',价格=9.99百万},新电影{ Title='Rio Bravo ',发行日期=DateTime。解析(' 1959-4-15 '),流派='西方',价格=3.99m });}右键单击电影下方的红色波浪线,选择解决,然后单击使用MvcMovie。模型;

这样做之后,将添加以下using语句:

使用MvcMovie。模型;每次“代码优先迁移”调用Seed方法(即在包管理器控制台中调用update-database)时,此调用都会更新行:更新已经插入的行,或者插入不存在的行。

按CTRL-SHIFT-B构建项目。(如果此构建不成功,以下步骤将失败。)

下一步是创建一个DbMigration类来初始化数据库迁移。迁移此类将创建一个新的数据库,这就是为什么您在上一步中删除了movie.mdf文件。

在包管理器控制台窗口中,输入“添加-迁移初始”命令以创建初始迁移。“初始”的名称是任意的,是用于创建迁移文件的名称。

代码优先迁移将在迁移文件夹中创建另一个类文件(文件名为: {DateStamp}_Initial.cs),该类中包含的代码将创建数据库的架构。迁移文件名以时间戳作为前缀,以帮助排序和搜索。请检查文件{DateStamp}_Initial.cs,其中包含为电影数据库创建电影表的说明。更新数据库时,将运行文件{ DateStamp } _ Initial.cs并创建数据库的模式。然后运行种子方法来填充数据库的测试数据。

在包管理器控制台中,输入命令“update-database”以创建数据库并运行Seed方法。

如果您收到一个错误,表明该表已经存在并且无法创建,这可能是因为您已经删除了数据库,并且在执行update-database之前运行了应用程序。在这种情况下,请再次删除Movies.mdf文件,然后重试更新数据库命令。如果仍然遇到错误,请删除迁移文件夹及其内容,然后从头重做。(也就是说,删除Movies.mdf文件,然后启用-迁移)。

运行应用程序,然后浏览网址/电影。数据如下:

向电影模型添加分级属性。

向现有电影类别添加新的分级属性。打开模型\电影. cs文件并添加以下分级属性:

公共字符串评级{ get设置;}完整的电影课程如下:

公共类Movie { public int ID { get设置;}公共字符串Title { get设置;}公共DateTime ReleaseDate { get设置;}公共字符串string Genre设置;}公共十进制价格{ get设置;}公共字符串评级{ get设置;} }构建应用程序构建构建移动或CTRL-SHIFT-B .

现在,您已经更新了模型类,您需要更新视图\电影\索引. cshtml和视图\电影\创建. cshtml的视图模板,以便新的分级属性可以显示在浏览器中。

打开\视图\电影\索引. cshtml文件,并在“价格”列后添加标题/th的列标题。然后添加一个td列来显示@item.Rating的值。

@ model IEnumerableMvcMovie。模型。电影@{视图包。标题=“索引”;} h2Index/h2 p @Html。ActionLink('新建','创建')/p表tr th @Html。DisplayNameFor(model=model。title)/th @ Html。DisplayNameFor(model=model。release date)/th @ Html。DisplayNameFor(model=model。流派)th @ Html。DisplayNameFor(model=model。价格)th @ Html。DisplayNameFor(model=model。评级)/th/th/tr @ foreach(模型中的var项目){ tr td @Html。DisplayFor(modelItem=item。Title) /td td @Html。DisplayFor(modelItem=item。ReleaseDate)/td td @Html。DisplayFor(modelItem=item。流派)/td td @Html。DisplayFor(modelItem=item。价格)/td td @Html。DisplayFor(modelItem=item。评级)/td td @Html。ActionLink('Edit ',' Edit ',new { id=item。ID }) | @Html。ActionLink('Details ',' Details ',new { id=item。ID }) | @Html。ActionLink('Delete ',Delete ',new {id=item。id})/td/tr}/table接下来,打开\Views\Movies\Create.cshtml文件,并在表单标签末尾附近添加以下代码。您可以在创建新电影时指定电影分级。

div @Html。LabelFor(model=model。Rating) /divdiv @Html。EditorFor(model=model。评级)@Html。ValidationMessageFor(model=model。评级)/部门

现在,您已经更新了应用程序代码以支持新的评级属性。

立即运行应用程序并浏览/电影的网址。但是,执行此操作时,您将看到以下错误消息之一:

您现在会看到这个错误,因为在应用程序中,最新电影模型类的模式不同于现有数据库电影表的模式。(在数据库表中,没有“评级”列。)

我们将使用代码优先迁移来解决这个问题。

更新种子方法,以便它可以为新列提供一个值。打开文件“迁移\配置”并将“分级”字段添加到电影的每个对象中。

新电影{title='当哈利遇见莎莉',release date=datetime . parse(' 1989-1-11 '),流派='浪漫喜剧',分级=' g ',价格=7.99m},构建解决方案,然后打开包管理器的控制台窗口,输入以下命令。

添加-迁移添加组

add-migration命令告诉迁移框架检查当前电影模型和当前电影DB Schema,并创建必要的代码将数据库迁移到新模型。AddRatingMig是用于命名迁移文件的任意文件名参数。这将有助于使迁移步骤成为一个有意义的名称。

命令完成后,使用Visual Studio打开类文件,该文件是从DbMIgration类的定义中新继承的。在Up方法中,您可以看到创建新列的代码:

公共分部类AddRatingMig : DbMigration{公共重写void Up() { AddColumn('dbo。电影','评级',c=c . String());}公共覆盖void Down() { DropColumn('dbo。电影','评级');} }构建解决方案,然后在包管理器控制台窗口中输入“更新-数据库”命令。

下图显示了包管理器控制台窗口的输出(AddRatingMig的前缀时间戳会有所不同)。

再次运行应用程序,并浏览/电影的网址。您可以看到新的评级字段。

单击新建链接添加新电影。注意,请给电影添加分级。

单击创建。包括分级在内的新电影将显示在电影列表中:

此外,您还应该将评级字段添加到编辑、详细信息和搜索索引的视图模板中。

您可以在包管理器控制台窗口中再次输入“update-database”命令,并且不会有新的更改,因为数据库Schema和模型类现在已经匹配。

在本节中,您已经看到了如何修改模型对象并始终保持它们与数据库模式同步。您还学习了一个通过填充示例数据创建新数据库的示例,您可以一次又一次地尝试。接下来,让我们看看如何向模型类添加丰富的验证逻辑,并对模型类执行一些强制性的业务规则验证。

版权声明:ASP.NET MVC 4简介(7):为电影表格和模型添加新字段是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。