EF代码首先与ASP.NET MVC 3工具更新和数据脚本

本周早些时候,我在博客新的ASP.NET MVC 3工具更新,我们上个月发布。 

在今天的博客文章中,我会去到更多有关它带来的清凉新功能的详细信息:

  1. 内置为EF 4.1的支持(其中包括新的EF“代码优先”​​的支持)
  2. 内置在Visual Studio中的数据脚手架支持(使您能够快速创建数据驱动的网站)

这两个特点,提供了一个非常甜美,非常强大,方式来处理数据,并建立数据驱动的Web应用。

我们将构建的场景

为了说明如何使用上述功能,我们将演练一个简单的数据驱动网站建设。它将支持上市产品:

SNAGHTML4e066438

以及创建/编辑新产品(类别):

SNAGHTML4e078291

现在,我们可以构建整个应用程序与ASP.NET MVC 3(和创建数据库备份),在只有一两分钟。

步骤1:创建新项目

我们将首先创建一个新的ASP.NET MVC的3个项目(使用“文件” - >“新建项目”菜单命令)。我们将使用“上网工程”模板 - 这将为我们为我们的应用程序的默认起动模板。 

当你在解决方案资源管理器内的新创建的项目的时候,你会看到ASP.NET MVC 3工具更新增加了一个新的装配 - EntityFramework -我们的ASP.NET MVC的3个项目:

形象

EntityFramework大会实现实体框架4.1 -我们上个月发布的外汇基金4.1带来了一堆伟大的数据API改进NET -包括新的“代码的第一个”选项 。外汇基金代码首先提供了一个真正优雅和干净的方式来处理数据,让你做,而不需要一个设计师或XML映射文件。现在,您可以轻松地利用这个默认情况下,所有新的ASP.NET MVC的3个项目的优势。

我们将使用外汇基金守则“第一种方法来实现我们的数据应用程序进行访问。

第2步:实现模型类

我们的第一步,将创建两个类 - 产品和品类 - 我们将使用我们的应用程序定义“模式”。我们的项目\型号使用下面的代码的文件夹内,我们将实现这些标准的“纯老的C#对象”:

形象

请注意上述类标准类。NET数据类型。他们不需要从任何基类派生,也没有实现任何接口,。 

除了标准的标量属性,每个班都有一个“协会”属性。例如,“产品”类有“类别”属性,使开发人员获得它所属的类别。同样,在“类别”类有一个“产品”属性,使开发人员能够检索在特定类别的产品。EF代码首先可以处理自动管理协会(使用主键/外键的值),并能延迟加载按需适当的数据。

第三步:使用EF代码首先实现一个StoreContext类

现在,我们已经定义了我们的两个模型类,我们下一步将实施“DbContext”类使用外汇基金代码首先将模型类映射到数据库中的表。我们将实施这一使用下面的代码:

SNAGHTML4d35a6ee

“StoreContext”级以上的DbContext我们使用我们的产品和类别类映射到/从数据库中的类。来自EF代码首先DbContext基地提供的类,并公开了两个属性对应到我们的数据库内中的表。对于本示例,我们使用的是“约定优于配置”基于映射规则的默认定义的类应如何从数据库映射到/。这意味着该产品属性将映射到产品表,以及类别属性将映射到一个分类表。在以后的博客文章中,我将谈论如何,您可以选择重写和执行自定义映射。

在您的解决方案,您可以添加上面的类的任何地方。例如,您可以添加\模型项目文件夹内-或者在一个单独的类库项目,如果你喜欢保持你的数据代码的独立。您将需要添加一个“使用”声明的System.Data.Entity的类文件的顶部的命名空间(以参考DbContext和DbSet <T>类 )。

当你保存了上面的类文件,编译该项目 - 你会希望有下一步前建成。

第4步:脚手架一个分类控制器

我们有我们需要的一切,我们的数据模型和保存/从数据库中检索。现在让我们创建一个ASP.NET MVC的Controller类,将实施必要的支持,以显示我们的分类数据,使创建/编辑/删除分类对象。上个月的ASP.NET MVC 3工具更新之前,您将不得不手动编写一个控制器类,做到这一点(和落实所有EF数据访问代码)。ASP.NET MVC 3工具更新,包括内置的“脚手架”的支持,可以帮助自动为你做这。

为了脚手架一个新的控制器类,我们将右键点击“我们的项目文件夹”/控制器,并选​​择“添加 - >控制器上下文菜单:

形象

选择添加 - >控制器,将弹出“添加控制器”对话框。我们要创建“CategoriesController”我们将其命名控制器类。与上个月的ASP.NET MVC 3工具更新开始,“添加控制器”对话框现在还支持一个新的“脚手架选项”一节 - 这使您可以选择“脚手架”,新的控制器,使用各种内置模板:

形象

我们将选择“控制器与读/写的行动和意见,使用实体框架”模板 - 这将创建一个控制器类,所有的EF所必需的代码创建,更新,列出和删除模型对象。

选择此模板后,我们可以选择的模型类,我们希望我们的Controller来实现CRUD支持 - 在这种情况下,在“类别”类。我们还可以选择EF DbContext / ObjectContext类,我们要使用访问数据库 - “StoreContext”我们前面定义的类,在这种情况下:

SNAGHTML4d81d687

当我们点击“添加”按钮,Visual Studio会自动为我们创建一个CategoriesController类 - 与适当的创建,编辑,详情,删除和它里面的index操作方法 - 每个行动以及相关的视图模板:

形象

如果你打开​​CategoriesController.cs类,你会发现,在它的行动的方法实现的CRUD支持EF数据访问所需的代码:

形象

而现在我们所有的代码,我们需要实施分类,在我们的数据库中的数据列表/编辑

步骤5:配置数据库的位置

最后的一步,我们将做运行我们的应用程序之前,我们要使用的数据库是指向我们的应用程序。外汇基金代码,第一个允许你使用现有的数据库,你已经定义,另外,您可以在一个尚不存在的数据库,点它 - 在这种情况下,,它会自动创建你使用你定义的模型类。

无连接字符串

默认情况下,你其实并不需要配置一个连接字符串,使其指向一个数据库。如果你不指定一个,EF代码首先将默认创建一个新的SQL Express数据库,并将其名称符合您的DbContext类的名称(例如:它上面创建一个ScaffoldingDemo.Models.StoreContext您当地的\ SQLExpress数据库内的数据库。 实例)。 

显式指定的连接字符串

您也可以明确指定您希望您的数据库,生活由您的应用程序的web.config文件中添加一个连接字符串。您将需要连接字符串的名称相匹配的DbContext类的名称。例如 - 在我们上面我们DbContext类的应用程序被命名为“StoreContext”,并因此默认情况下EF将一个连接字符串具有相同的名称,以确定数据库的位置。

下面是项,我们会增加我们的web.config文件,如果我们想在我们的应用程序的\ App_Data文件夹命名为“Store.sdf”使用嵌入式SQL CE数据库:

的<configuration> 
      <connectionStrings> 
              <添加名称=“StoreContext” 
                         的connectionString =“数据源= |使用DataDirectory | \ Store.sdf” 
                         的ProviderName =“System.Data.SqlServerCe.4.0”/> 
       </的connectionStrings>

</配置>

您可以了解更多有关SQL CE - -和新的VS 2010 SP1的工具支持它,我以前的博客文章。

第6步:运行应用程序

OK -现在让我们运行的应用程序和/分类网址导航这将执行我们CategoriesController的Index()方法-这将在我们的数据库中列出的所有类别。目前我们没有任何:

SNAGHTML4dede162

让我们单击“新建”链接,以创建一个新的的类别-这将导航/分类/创建的URL,这为我们提供了一个形式,以创建一个新的的类别:

SNAGHTML4def03ef

点击“创建”按钮,将发布的形式向我们CategoriesController到我们的数据库,并添加一个新的类别。我们可以重复这几次添加几个不同的类别:

SNAGHTML4df02093

很酷的事情是,我们没有写任何控制器或查看代码启用此 - 脚手架支撑自动生成的代码,我们需要启用此。这提供了一个非常简单的方式开始。然后,我们可以去调整它在必要时进一步自定义的功能。

第7步:在数据库

我们配置我们的应用程序使用一个连接字符串指出(当时)不存在一个SQL CE数据库。当我们运行我们的应用程序,外汇基金4.1检测数据库不存在,并自动为我们创建 - 基于我们前面定义的产品和类别类。 

看到数据库在Visual Studio的“解决方案资源管理器”的顶​​部,单击“显示所有文件”图标,并添加“Store.sdf”数据库是由外汇基金自动创建您的项目:

形象

然后,您可以双击“数据库在服务器资源管理器打开它 - 和扩大表内看到创建的模式:

形象

请注意以上的外汇基金代码如何自动创建相应的数据库,基于我们前面创建的类别和产品类的模式。它还可以自动设置类中指定的关联属性的两个表之间的主键/外键关系。

第8步:脚手架产品“控制器

我们已经创建了一个CategoriesController类上市和编辑分类管理。现在,让我们创建一个ProductsController类,管理上市和编辑产品。

像以前一样,我们会用鼠标右键单击\控制器,在我们的项目文件夹,并选择“添加 - >控制器上下文菜单。我们要创造“的ProductsController”,并指出,我们要脚手架使用与产品模型类EF模板,我们将其命名控制器类:

SNAGHTML4dfb7c0b

点击“添加”按钮将scaffold的ProductsController类对我们来说,采取适当的行动方法的CRUD场景,并创建与他们相关的视图模板:

形象

然后,我们可以再次运行我们的项目和导航产品在它的网址 :

SNAGHTML4dfeca88

让我们单击“新建”链接创建一个新的产品:

SNAGHTML4e028a2f

要注意的是一个很酷的事情,“类别”是一个有效的分类下拉(不只是与外键的整数值的TextBox):

形象

在Visual Studio的脚手架支持是足够的智能检测,分类关联,和支架EF的代码填入下拉有效的分类。

我们/产品网址输入几个产品后,将显示象下面的数据 :

SNAGHTML4e066438

注意再次类别显示如何使用友好的名称 - 而不仅是外键的值。

了解更多

上述演练提供了一个新的EF一代码和数据的脚手架中内置的ASP.NET MVC的3工具更新支持快速查找,以及如何你可以用它们来轻松快速地引进应用程序开发。外汇基金代码首先让你写的令人难以置信的干净的数据访问代码。数据脚手架的支持使您能够快速创建数据的UI - 然后让你去,并轻松地调整/定制它进一步。

除了EF代码首先工作,你也可以使用对标准的EF的ObjectContext对象的数据脚手架的支持(使用数据库的第一个或第一个模型的方法和EF所见即所得的设计建造)。

脚手架

您可以了解更多关于新的ASP.NET MVC的3脚手架从史蒂夫Sanderson的优秀的谈话在MIX支持:

史蒂夫在讲话中还介绍了如何您可以使用命令行的脚手架支持(使用NuGet),以及如何你可以下载并使用额外的脚手架模板(例如:可以自动执行一个仓库模式等)。另外,还要确保您的书签史蒂夫的关于脚手架的优秀博客系列(和它的可扩展性),在这里:

EF守则第一

我会做更多的博客文章,在未来关于E​​F代码。下面是一些关于它的过去我写的教程的链接:

注:上面的教程写对CTP4发行的外汇基金代码(和一些API有一点不同) - 但在他们的概念和概述情景与最终版本相同。

ASP.NET MVC 3

如果您想了解更多有关ASP.NET MVC 3,我强烈建议在荷兰DevDays在MIX Scott Hanselman的优秀的视频演示:

还检查了所有的新内容和视频http://asp.net/mvc网站:

摘要

新的ASP.NET MVC 3模具更新是善良的。如果你还没有下载和安装它,我强烈建议你这样做。请继续关注甚至更多的博客文章!

希望这会有所帮助,

斯科特

PS我现在还使用快速更新Twitter和共享链接。按照我在:twitter.com / scottgu

原文出自:http://weblogs.asp.net/scottgu/archive/2011/05/05/ef-code-first-and-data-scaffolding-with-the-asp-net-mvc-3-tools-update.aspx


posted on 2011-10-13 17:26  caling  阅读(709)  评论(0编辑  收藏  举报

导航