在本节中,您将利用Entity Framework
Code
First来贯彻模型类上的操作。从而使得那一个操作和改变,能够使用到数据库中。
暗中同意景况下,如同你在事先的教程中所作的那么,使用
Entity Framework Code First自动创设一个数据库,Code
First为数据库所增进的表,将扶持你跟踪数据库是还是不是和从它生成的模子类是同步的。假若他们不是联合的,Entity
Framework将抛出一个不当。那尤其有益的在开发时就可以发现错误,否则你可能会在运转时才发觉这么些标题。
(由一个晦涩的错误新闻,才发现那一个难点。)
为对象模型的更动设置 Code First Migrations
只要您使用的是 Visual Studio
2012,从化解方案资源管理器中双击Movies.mdf,打开数据库工具。Visual
Studio Express for Web将突显数据库资源管理器,Visual Studio 2012
将显得服务器资源管理器。假若你使用的是Visual Studio 2010,请使用 SQL
Server对象资源管理器。
在数据库工具 (数据库资源管理器、
服务器资源管理器或 SQL
Server对象资源管理器),右键单击MovieDBContext
,并选择删除以删除电影数据库。
回到到化解方案资源管理器。在Movies.mdf文件上右键单击,并选用删除以删除电影数据库。
Build应用程序,以担保没有任何编译错误。
从工具菜单上,单击库包管理器,然后点击程序包管理器控制台.
在 软件包管理器控制台
窗口中PM> 指示符下输入”Enable-Migrations –ContextTypeName
MvcMovie.Models.MovieDBContext”。
(如上所示)Enable-Migrations命令会在Migrations文件夹中创立一个Configuration.cs文件。
在Visual Studio
中打开Configuration.cs文件。把Configuration.cs文件中的Seed方法,替换为上边的代码:
protected override void
Seed(MvcMovie.Models.MovieDBContext context) {
context.Movies.AddOrUpdate( i => i.Title, new Movie { Title = “When
Harry Met Sally”, ReleaseDate = DateTime.Parse(“1989-1-11”), Genre =
“Romantic Comedy”, Price = 7.99M }, new Movie { Title = “Ghostbusters “,
ReleaseDate = DateTime.Parse(“1984-3-13”), Genre = “Comedy”, Price =
8.99M }, new Movie { Title = “Ghostbusters 2”, ReleaseDate =
DateTime.Parse(“1986-2-23”), Genre = “Comedy”, Price = 9.99M }, new
Movie { Title = “Rio Bravo”, ReleaseDate = DateTime.Parse(“1959-4-15”),
Genre = “Western”, Price = 3.99M } ); }
在Movie下边出现的青黑波浪线上右键单击,并精选Resolve接下来点击using
MvcMovie.Models;
如此那般做之后,将丰盛以下的
using语句:
using MvcMovie.Models;
老是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
类如下:
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
类,您还索要立异\Views\Movies\Index.cshtml和\Views\Movies\Create.cshtml视图模板,以便能在浏览器中显得新的Rating
属性。
打开\Views\Movies\Index.cshtml文件,在Price列前边添加<th>Rating</th>
的列头。然后添加一个<td>
列来呈现@item.Rating
的值。上边是立异的Index.cshtml视图模板:
@model
IEnumerable<MvcMovie.Models.Movie> @{ ViewBag.Title = “Index”; }
<h2>Index</h2> <p> @Html.ActionLink(“Create New”,
“Create”) </p> <table> <tr> <th>
@Html.DisplayNameFor(model => model.Title) </th> <th>
@Html.DisplayNameFor(model => model.ReleaseDate) </th>
<th> @Html.DisplayNameFor(model => model.Genre) </th>
<th> @Html.DisplayNameFor(model => model.Price) </th>
<th> @Html.DisplayNameFor(model => model.Rating) </th>
<th></th> </tr> @foreach (var item in Model) {
<tr> <td> @Html.DisplayFor(modelItem => item.Title)
</td> <td> @Html.DisplayFor(modelItem =>
item.ReleaseDate) </td> <td> @Html.DisplayFor(modelItem
=> item.Genre) </td> <td> @Html.DisplayFor(modelItem
=> item.Price) </td> <td> @Html.DisplayFor(modelItem
=> item.Rating) </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文本,并在form标签为止处的附近添加如下代码。您可以在成立新的影片时指定一个影视等级。
<div class=”editor-label”>
@Html.LabelFor(model => model.Rating) </div> <div
class=”editor-field”> @Html.EditorFor(model => model.Rating)
@Html.ValidationMessageFor(model => model.Rating) </div>
现行,您曾经更新应用程序代码以支撑了新的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
方法中,您可以观看创立新列的代码:
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的同步。您还学习了利用填充示例数据来成立新数据库的事例,您可以频繁品味。接下来,让我们看看哪些将添加的印证逻辑添加到模型类,并对模型类执行一些威迫的工作规则验证。相信有了本节如何修改模型对象并一向维持其和数据库Schema同步的内容介绍,我们会对MVC的精通又加深一步。后边倘若要拓展ASP.ET
MVC的开支,在拥有MVC的学识的同时,还足以凭借一些开发工具。使用 ComponentOne
Studio ASP.NET
MVC 那款轻量级控件,可以助力你的MVC开发进度。
完全文档下载:Asp.Net
MVC4入门指南.pdf
译者注:
本连串共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
- 增进一个控制器
SQL Server,· 原文地址: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
- 给数据模型添加校验器
·
译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/05/2944030.html
- 询问详细音讯和删除记录
·
译文地址:http://www.cnblogs.com/powertoolsteam/archive/2013/03/07/2948000.html
10.第三方控件Studio for ASP.NET Wijmo MVC4 工具应用
·
地址:http://www.cnblogs.com/powertoolsteam/archive/2013/05/09/3068699.html
有关阅读:
微软 Build 2017 开发者大会:Azure 与 AI
的疾奥迪A4飞