ASP.NET MVC 4 快速开发入门

在本文中,将探讨如何利用Code First技术,结合ASP.NET MVC4框架,快速搭建一个待办事项(TODO)应用程序。将使用MVC Scaffolding技术来快速生成控制器和视图。

先决条件

在开始之前,请确保已经安装了以下软件:

  • Visual Studio 2010 SP1
  • ASP.NET MVC4
  • Visual Studio 的 NuGet 包管理器
  • SQL Express 数据库

Code First是一种开发方法论,它允许使用C#或VB.NET类来描述模型。Code First 是从Entity Framework4.1开始提供的新功能,可以使用它来从模型生成新的数据库,或者将模型映射到现有的数据库。

Entity Framework(EF)是一个对象关系映射器,它允许.NET开发者使用特定领域的对象来操作关系数据,从而消除了开发者通常需要编写的大部分数据访问代码。

ASP.NET MVC4 是一个框架,用于构建可扩展的、基于标准的Web应用程序,它使用ASP.NET和.NET框架的强大功能以及已建立的设计模式。

MVC Scaffolding 是一个为ASP.NET提供的脚手架包,可以通过NuGet使用‘Install-Package MvcScaffolding’命令来安装。

快速准备

在开始之前,请确保已经安装了NuGet包管理器和SQL组件。在Visual Studio 2010中,转到“工具”->“扩展管理器”,搜索并安装NuGet包管理器。

安装NuGet包后,应该能够看到库包管理器。转到“工具”->“库包管理器”->“包管理器控制台”,输入以下命令来安装SQL组件:

Install-Package EntityFramework.SqlServerCompact

步骤1:创建新的MVC 4应用程序

创建一个新的MVC4应用程序,将其命名为TODO。

步骤2:选择Internet应用程序模板并使用Razor作为视图引擎

选择Internet应用程序模板,并选择Razor作为视图引擎。

步骤3:安装MvcScaffolding

打开包管理器控制台(“工具”->“库包管理器”->“包管理器控制台”),运行以下命令:

Install-Package EntityFramework Install-Package MvcScaffolding

这将安装MvcScaffolding。

步骤4:创建模型

在模型文件夹中创建一个名为Models.cs的文件(实际上,应该为不同的模型创建不同的文件,为了节省时间将它们全部放在一起)。Models.cs包含以下三个模型:

namespace TODO.Models { public class Task { public int TaskId { get; set; } public string Name { get; set; } public string Description { get; set; } public int? StatusId { get; set; } public virtual Status Status { get; set; } public virtual ICollection<Note> Notes { get; set; } public DateTime? CreatedOn { get; set; } public DateTime? ModifiedOn { get; set; } } public class Status { public int StatusId { get; set; } public string Name { get; set; } } public class Note { public int NoteId { get; set; } public string Description { get; set; } public int? TaskId { get; set; } public DateTime? CreatedOn { get; set; } public DateTime? ModifiedOn { get; set; } } }

数据注释和定义关系:

注意第18行,该属性应该是virtual的,并且有一个名为ForeignKey的属性,用于外键链接。同样,查看第16行,需要有StatusId来链接表。

步骤5:创建控制器和视图

转到包管理器控制台,运行以下命令:

Scaffold Controller Task -Repository Scaffold Controller Note -Repository Scaffold Controller Status –Repository

使用‘-Repository’选项,因为希望通过仓库访问数据。当更改模型并想要重新创建控制器或视图时,请使用‘-Force’选项。

步骤6:编辑布局

打开Shared/_Layout.cshtml并添加链接,以便可以轻松导航到操作,并且可能想要更新应用程序的标题。

运行应用程序,它应该可以正常工作。在开始输入数据并检查数据库之前,让从视图中隐藏CreatedOn和ModifiedOn字段,并从代码本身更新它们。

注释掉Notes和Tasks视图的_CreateOrEdit.cshtml中的div,这些div显示了ModifiedOn和CreatedOn字段。

转到NoteRepository.cs和TaskRepository.cs,找到InsertOrUpdate()方法并进行如下修改:

public void InsertOrUpdate(Task task) { if (task.TaskId == default(int)) { // 新实体 task.CreatedOn = task.ModifiedOn = DateTime.Now; context.Tasks.Add(task); } else { // 现有实体 task.ModifiedOn = DateTime.Now; context.Entry(task).State = EntityState.Modified; } }

注意第5行和第9行,在保存和更新模型之前修改了ModifiedOn和CreatedOn。

在tasks的_CreateOrEdit.cshtml中添加以下行,以保留CreatedOn的值:

@Html.HiddenFor(m=>m.CreatedOn)

再次运行应用程序,应该能够添加、更新和删除数据。

这还不是全部,这已经为自动创建了数据库,可以查看它。浏览到SQLExpress数据库,应该能够看到为此应用程序创建的数据库。

检查表、列、主键和外键,它们都完全按照在模型中创建的那样到位。

有很多要解释的内容,但是,根据本文的范围,将本文视为深入了解的起点。在结束本文之前,还想告诉最后一件事,那就是所谓的数据库初始化器。

转到TODOContext.cs,在模型文件夹中,创建TODOContext的构造函数如下:

public TODOContext() { System.Data.Entity.Database.SetInitializer( new System.Data.Entity.DropCreateDatabaseIfModelChanges<TODO.Models.TODOContext>()); }

它的作用正如其名称所说的那样,当通过添加或删除一些属性更改任何模型时,当前数据库将被删除,然后重新创建。如果在没有此构造函数的情况下修改模型,可能会看到以下错误:

已经提到数据库将在SQLExpress中创建,如果在web.config的connectionstring中指定的数据库中没有看到数据库被创建,请不要感到惊讶。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485