EF代码首先与ASP.NET MVC 3工具更新和数据脚本
本周早些时候,我在博客新的ASP.NET MVC 3工具更新,我们上个月发布。
在今天的博客文章中,我会去到更多有关它带来的清凉新功能的详细信息:
- 内置为EF 4.1的支持(其中包括新的EF“代码优先”的支持)
- 内置在Visual Studio中的数据脚手架支持(使您能够快速创建数据驱动的网站)
这两个特点,提供了一个非常甜美,非常强大,方式来处理数据,并建立数据驱动的Web应用。
我们将构建的场景
为了说明如何使用上述功能,我们将演练一个简单的数据驱动网站建设。它将支持上市产品:
以及创建/编辑新产品(类别):
现在,我们可以构建整个应用程序与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”类使用外汇基金代码首先将模型类映射到数据库中的表。我们将实施这一使用下面的代码:
“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”我们前面定义的类,在这种情况下:
当我们点击“添加”按钮,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()方法-这将在我们的数据库中列出的所有类别。目前我们没有任何:
让我们单击“新建”链接,以创建一个新的的类别-这将导航/分类/创建的URL,这为我们提供了一个形式,以创建一个新的的类别:
点击“创建”按钮,将发布的形式向我们CategoriesController到我们的数据库,并添加一个新的类别。我们可以重复这几次添加几个不同的类别:
很酷的事情是,我们没有写任何控制器或查看代码启用此 - 脚手架支撑自动生成的代码,我们需要启用此。这提供了一个非常简单的方式开始。然后,我们可以去调整它在必要时进一步自定义的功能。
第7步:在数据库
我们配置我们的应用程序使用一个连接字符串指出(当时)不存在一个SQL CE数据库。当我们运行我们的应用程序,外汇基金4.1检测数据库不存在,并自动为我们创建 - 基于我们前面定义的产品和类别类。
看到数据库在Visual Studio的“解决方案资源管理器”的顶部,单击“显示所有文件”图标,并添加“Store.sdf”数据库是由外汇基金自动创建您的项目:
然后,您可以双击“数据库在服务器资源管理器打开它 - 和扩大表内看到创建的模式:
请注意以上的外汇基金代码如何自动创建相应的数据库,基于我们前面创建的类别和产品类的模式。它还可以自动设置类中指定的关联属性的两个表之间的主键/外键关系。
第8步:脚手架产品“控制器
我们已经创建了一个CategoriesController类上市和编辑分类管理。现在,让我们创建一个ProductsController类,管理上市和编辑产品。
像以前一样,我们会用鼠标右键单击\控制器,在我们的项目文件夹,并选择“添加 - >控制器上下文菜单。我们要创造“的ProductsController”,并指出,我们要脚手架使用与产品模型类EF模板,我们将其命名控制器类:
点击“添加”按钮将scaffold的ProductsController类对我们来说,采取适当的行动方法的CRUD场景,并创建与他们相关的视图模板:
然后,我们可以再次运行我们的项目和导航/ 产品在它的网址 :
让我们单击“新建”链接创建一个新的产品:
要注意的是一个很酷的事情,“类别”是一个有效的分类下拉(不只是与外键的整数值的TextBox):
在Visual Studio的脚手架支持是足够的智能检测,分类关联,和支架EF的代码填入下拉有效的分类。
我们/产品网址输入几个产品后,将显示象下面的数据 :
注意再次类别显示如何使用友好的名称 - 而不仅是外键的值。
了解更多
上述演练提供了一个新的EF一代码和数据的脚手架中内置的ASP.NET MVC的3工具更新支持快速查找,以及如何你可以用它们来轻松快速地引进应用程序开发。外汇基金代码首先让你写的令人难以置信的干净的数据访问代码。数据脚手架的支持使您能够快速创建数据的UI - 然后让你去,并轻松地调整/定制它进一步。
除了EF代码首先工作,你也可以使用对标准的EF的ObjectContext对象的数据脚手架的支持(使用数据库的第一个或第一个模型的方法和EF所见即所得的设计建造)。
脚手架
您可以了解更多关于新的ASP.NET MVC的3脚手架从史蒂夫Sanderson的优秀的谈话在MIX支持:
- 脚手架- ASP.NET,NuGet,MVCScaffolding -史蒂夫Sanderon的IT资产组合谈话
史蒂夫在讲话中还介绍了如何您可以使用命令行的脚手架支持(使用NuGet),以及如何你可以下载并使用额外的脚手架模板(例如:可以自动执行一个仓库模式等)。另外,还要确保您的书签史蒂夫的关于脚手架的优秀博客系列(和它的可扩展性),在这里:
- 脚手架与ASP.NET MVC的3 -有关ASP.NET MVC 3脚手架优秀的博客系列
EF守则第一
我会做更多的博客文章,在未来关于EF代码。下面是一些关于它的过去我写的教程的链接:
注:上面的教程写对CTP4发行的外汇基金代码(和一些API有一点不同) - 但在他们的概念和概述情景与最终版本相同。
ASP.NET MVC 3
如果您想了解更多有关ASP.NET MVC 3,我强烈建议在荷兰DevDays在MIX Scott Hanselman的优秀的视频演示:
- ASP.NET MVC的3 101 -从初级到高级
- 概述MS Web Stack的爱 -斯科特在MIX的谈话
还检查了所有的新内容和视频http://asp.net/mvc网站:
摘要
新的ASP.NET MVC 3模具更新是善良的。如果你还没有下载和安装它,我强烈建议你这样做。请继续关注甚至更多的博客文章!
希望这会有所帮助,
斯科特
PS我现在还使用快速更新Twitter和共享链接。按照我在:twitter.com / scottgu