ASP.NET MVC 4 模型和数据访问
此动手实验室假设你对 ASP.NET MVC 有基本的了解。 如果以前没有使用 过 ASP.NET MVC ,我们建议你完成 ASP.NET MVC 4 基础知识 实践实验室。
本实验室将指导你完成以前通过对源文件夹中提供的示例 Web 应用程序应用进行次要更改来介绍的增强功能和新功能。
注意
所有示例代码和代码片段都包含在 Web Camp 培训工具包中,可在 Microsoft-Web/WebCampTrainingKit 版本获取。 特定于此实验室的项目在 ASP.NET MVC 4 模型和数据访问中提供。
在 ASP.NET MVC 基础知识 实践实验室中,你已将硬编码的数据从控制器传递到视图模板。 但是,为了生成真实的 Web 应用程序,你可能想要使用真实数据库。
本动手实验室将演示如何使用数据库引擎来存储和检索音乐应用商店应用程序所需的数据。 为此,你将从现有数据库开始,并从中创建实体数据模型。 在本实验室中,你将满足 Database First 方法和 Code First 方法。
但是,还可以使用 Model First 方法,使用工具创建同一模型,然后从中生成数据库。
Database First 与 Model First
生成模型后,你将在 StoreController 中做出适当的调整,以便为应用商店视图提供从数据库获取的数据,而不是使用硬编码的数据。 无需对视图模板进行任何更改,因为 StoreController 会将相同的 ViewModel 返回到视图模板,尽管这次数据来自数据库。
代码优先方法
Code First 方法允许我们从代码中定义模型,而无需生成通常与框架耦合的类。
首先,在代码中,模型对象使用 POCO(“普通旧 CLR 对象”)进行定义。 POCO 是没有继承且不实现接口的简单纯类。 我们可以从它们自动生成数据库,也可以使用现有数据库并从代码生成类映射。
使用此方法的好处是,模型与持久性框架(在本例中为实体框架)无关,因为 POCO 类与映射框架无关。
注意
此实验室基于 ASP.NET MVC 4 和自定义的音乐应用商店示例应用程序的一个版本,并最小化以适应此动手实验室中显示的功能。
如果要浏览整个音乐应用商店教程应用程序,可以在 MVC-Music-Store 中找到它。
先决条件
必须具有以下项才能完成此实验室:
- Microsoft Visual Studio Express 2012 for Web 或高级版(请阅读 附录 A ,了解如何安装它)。
安装
安装代码片段
为方便起见,你将在此实验室中管理的大部分代码都可用作 Visual Studio 代码片段。 若要安装代码片段,请运行 .\Source\Setup\CodeSnippets.vsi 文件。
如果你不熟悉 Visual Studio Code 代码片段,并且想要了解如何使用它们,则可以参考本文档“附录 C:使用代码片段” 中的附录。
练习
此动手实验室由以下练习组成:
注意
每个练习都附带一个 End 文件夹,其中包含在完成练习后应获取的结果解决方案。 如果需要完成练习的其他帮助,可以使用此解决方案作为指南。
估计完成本实验室的时间: 35 分钟。
练习 1:添加数据库
在本练习中,你将了解如何将包含 MusicStore 应用程序的表的数据库添加到解决方案,以便使用其数据。 使用模型生成数据库并将其添加到解决方案后,将修改 StoreController 类,以便为视图模板提供从数据库获取的数据,而不是使用硬编码的值。
任务 1 - 添加数据库
在此任务中,你将向解决方案添加已创建的数据库,其中包含 MusicStore 应用程序的主表。
打开 Source/Ex1-AddingADatabaseDBFirst/Begin/ 文件夹中的 Begin 解决方案。
在继续之前,需要下载一些缺少的 NuGet 包。 为此,请单击“项目”菜单,然后选择“管理 NuGet 包”。
在“管理 NuGet 包”对话框中,单击“还原”以下载缺少的包。
最后,通过单击“生成 | 生成解决方案”生成解决方案来生成解决方案。
注意
使用 NuGet 的优点之一是无需交付项目中的所有库,从而减少项目大小。 借助 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,可以在首次运行项目时下载所有必需的库。 因此,在从此实验室打开现有解决方案后,必须运行这些步骤。
添加 MvcMusicStore 数据库文件。 在此动手实验室中,你将使用已创建的名为 “MvcMusicStore.mdf”的数据库。 为此,请右键单击App_Data文件夹,指向“添加”,然后单击“现有项”。 浏览到 \Source\Assets 并选择 MvcMusicStore.mdf 文件。
添加现有项
MvcMusicStore.mdf数据库文件
数据库已添加到项目中。 即使数据库位于解决方案内部,也可以查询和更新它,因为它托管在不同的数据库服务器中。
解决方案资源管理器 中的 MvcMusicStore 数据库
验证与数据库的连接。 为此,双击 MvcMusicStore.mdf 建立连接。
连接到MvcMusicStore.mdf
任务 2 - 创建数据模型
在此任务中,你将创建一个数据模型,以便与上一任务中添加的数据库进行交互。
创建表示数据库的数据模型。 为此,请在解决方案资源管理器右键单击“模型”文件夹,指向“添加”,然后单击“新建项”。 在 “添加新项 ”对话框中,选择 “数据 ”模板,然后选择 ADO.NET 实体数据模型 项。 将数据模型名称更改为 StoreDB.edmx ,然后单击“ 添加”。
添加 StoreDB ADO.NET 实体数据模型
将显示实体数据模型向导。 此向导将指导你完成模型层的创建。 由于应基于最近添加的现有数据库创建模型,请选择“从数据库生成”,然后单击“下一步”。
选择模型内容
由于从数据库生成模型,需要指定要使用的连接。 单击“新建连接”。
选择 Microsoft SQL Server 数据库文件 ,然后单击“ 继续”。
选择数据源对话框
单击“浏览”并选择位于App_Data文件夹中的数据库MvcMusicStore.mdf,然后单击“确定”。
连接属性
生成的类的名称应与实体连接字符串相同,因此将其名称更改为 MusicStoreEntities,然后单击“下一步”。
选择数据连接
选择要使用的数据库对象。 由于实体模型只使用数据库的表,请选择“ 表 ”选项,并确保 还选中了模型中 的“包括外键列”和 “Pluralize”或“单数化生成的对象名称 ”选项。 将模型命名空间更改为 MvcMusicStore.Model ,然后单击“ 完成”。
选择数据库对象
注意
如果显示“安全警告”对话框,请单击“确定”以运行模板并生成模型实体的类。
将显示数据库的实体关系图,同时会创建一个单独的类,用于将每个表映射到数据库。 例如, Albums 表将由一个 Album 类表示,其中表中的每一列将映射到类属性。 这样,就可以查询和使用表示数据库中行的对象。
实体图
注意
T4 模板 (.tt) 运行代码以生成实体类,并将覆盖具有相同名称的现有类。 在此示例中,类“Album”、“流派”和“Artist”被生成的代码覆盖。
任务 3 - 生成应用程序
在此任务中,你将检查模型生成是否删除 了专辑、 流派 和 艺术家 模型类,但项目通过使用新的数据模型类成功生成。
通过选择“ 生成 ”菜单项,然后选择 “生成 MvcMusicStore”来生成项目。
生成项目
项目成功生成。 为什么它仍然有效? 它的工作原理是,数据库表具有字段,这些字段包括你在已删除的类 “专辑 ”和 “流派”类中使用的属性。
生成成功
虽然设计器以图表格式显示实体,但它们实际上是 C# 类。 展开解决方案资源管理器中的 StoreDB.edmx 节点,然后 StoreDB.tt,你将看到新的生成的实体。
生成的文件
任务 4 - 查询数据库
在此任务中,你将更新 StoreController 类,这样,它将查询数据库以检索信息,而不是使用硬编码的数据。
打开 Controllers\StoreController.cs并将以下字段添加到类,以保存名为 storeDB 的 MusicStoreEntities 类的实例:
(代码片段 - 模型和数据访问 - Ex1 storeDB)
public class StoreController : Controller { private MusicStoreEntities storeDB = new MusicStoreEntities();
MusicStoreEntities 类公开数据库中每个表的集合属性。 更新 Browse 操作方法,以检索包含所有专辑的流派。
(代码片段 - 模型和数据访问 - Ex1 应用商店浏览)
public ActionResult Browse(string genre) { // Retrieve Genre and its Associated Albums from database var genreModel = new Genre { Name = genre, Albums = this.storeDB.Albums.ToList() }; return this.View(genreModel); }
注意
你正在使用名为 LINQ 的 .NET 功能(语言集成查询)对这些集合编写强类型查询表达式,这将针对数据库执行代码,并返回可对其编程的对象。
有关 LINQ 的详细信息,请访问 msdn 站点。
更新 索引 操作方法以检索所有流派。
(代码片段 - 模型和数据访问 - Ex1 存储索引)
public ActionResult Index() { var genres = this.storeDB.Genres; return this.View(genres); }
更新 索引 操作方法以检索所有流派并将集合转换为列表。
(代码片段 - 模型和数据访问 - Ex1 Store GenreMenu)
// GET: /Store/GenreMenu [ChildActionOnly] public ActionResult GenreMenu() { var genres = this.storeDB.Genres.Take(9).ToList(); return this.PartialView(genres); }
任务 5 - 运行应用程序
在此任务中,你将检查“存储索引”页现在是否显示数据库中存储的流派,而不是硬编码的流派。 无需更改视图模板,因为 StoreController 返回的实体与之前相同,尽管这次数据来自数据库。
重新生成解决方案,然后按 F5 运行应用程序。
项目在主页中启动。 验证流派菜单不再是硬编码列表,并且数据是从数据库直接检索的。
从数据库浏览流派
现在浏览到任何流派,并验证专辑是否已从数据库填充。
从数据库浏览相册
练习 2:首先使用代码创建数据库
在本练习中,你将了解如何使用 Code First 方法创建包含 MusicStore 应用程序的表的数据库,以及如何访问其数据。
生成模型后,将修改 StoreController,以便为视图模板提供从数据库获取的数据,而不是使用硬编码的值。
注意
如果已完成练习 1 并已使用 Database First 方法,现在你将了解如何使用不同的过程获得相同的结果。 练习 1 共有的任务已标记为便于阅读。 如果尚未完成练习 1,但想要学习 Code First 方法,可以从本练习开始,并全面了解主题。
任务 1 - 填充示例数据
在此任务中,在最初使用 Code-First 创建数据库时,将使用示例数据填充数据库。
打开 Source/Ex2-CreatingADatabaseCodeFirst/Begin/ 文件夹中的 Begin 解决方案。 否则,可以继续使用 通过完成上一练习获得的 End 解决方案。
如果打开提供的 Begin 解决方案,则需要先下载一些缺少的 NuGet 包,然后再继续。 为此,请单击“项目”菜单,然后选择“管理 NuGet 包”。
在“管理 NuGet 包”对话框中,单击“还原”以下载缺少的包。
最后,通过单击“生成 | 生成解决方案”生成解决方案来生成解决方案。
注意
使用 NuGet 的优点之一是无需交付项目中的所有库,从而减少项目大小。 借助 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,可以在首次运行项目时下载所有必需的库。 因此,在从此实验室打开现有解决方案后,必须运行这些步骤。
将 SampleData.cs 文件添加到 Models 文件夹。 为此,请右键单击“ 模型 ”文件夹,指向 “添加 ”,然后单击“ 现有项”。 浏览到 \Source\Assets 并选择 SampleData.cs 文件。
示例数据填充代码
打开 Global.asax.cs 文件并添加以下 using 语句。
(代码片段 - 模型和数据访问 - Ex2 Global Asax Usings)
using MvcMusicStore.Models; using System.Data.Entity;
在 Application_Start() 方法中添加以下行来设置数据库初始值设定项。
(代码片段 - 模型和数据访问 - Ex2 Global Asax SetInitializer)
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); WebApiConfig.Register(GlobalConfiguration.Configuration); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); Database.SetInitializer(new SampleData()); }
任务 2 - 配置与数据库的连接
将数据库添加到项目后,将在 Web.config 文件中写入连接字符串。
在 Web.config 中添加连接字符串。为此,请在项目根处打开 Web.config,并将名为 DefaultConnection 的连接字符串替换为 connectionStrings> 节中的<此行:
Web.config 文件位置
<configuration> ... <connectionStrings> <add name="MusicStoreEntities" connectionString="data source=(LocalDb)\v11.0;initial catalog=MvcMusicStore;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\MvcMusicStore.mdf" providerName="System.Data.SqlClient" /> </connectionStrings> ...
任务 3 - 使用模型
配置了与数据库的连接后,即可将模型与数据库表链接。 在此任务中,你将创建一个类,该类将使用 Code First 链接到数据库。 请记住,存在应修改的 POCO 模型类。
注意
如果已完成练习 1,你会注意到此步骤是由向导执行的。 通过执行 Code First,你将手动创建将链接到数据实体的类。
从 Models 项目文件夹打开 POCO 模型类流派,并包括 ID。 将 int 属性与 name GenreId 一起使用。
(代码片段 - 模型和数据访问 - Ex2 代码第一流派)
namespace MvcMusicStore.Models { using System.Collections.Generic; public class Genre { public int GenreId { get; set; } public string Name { get; set; } public string Description { get; set; } public List<Album> Albums { get; set; } } }
现在,从 Models 项目文件夹打开 POCO 模型类“专辑”,并包括外键,使用 Names GenreId 和 ArtistId 创建属性。 此类已具有 主键的 GenreId 。
(代码片段 - 模型和数据访问 - Ex2 Code First Album)
namespace MvcMusicStore.Models { public class Album { public int AlbumId { get; set; } public int GenreId { get; set; } public int ArtistId { get; set; } public string Title { get; set; } public decimal Price { get; set; } public string AlbumArtUrl { get; set; } public virtual Genre Genre { get; set; } public virtual Artist Artist { get; set; } } }
打开 POCO 模型类 Artist 并包括 ArtistId 属性。
(代码片段 - 模型和数据访问 - Ex2 Code First Artist)
namespace MvcMusicStore.Models { public class Artist { public int ArtistId { get; set; } public string Name { get; set; } } }
右键单击 “模型 ”项目文件夹,然后选择“ 添加” |类。 将文件 命名为MusicStoreEntities.cs。 然后,单击“添加” 。
添加新项
添加类
打开刚刚创建的类,MusicStoreEntities.cs,并包括命名空间 System.Data.Entity 和 System.Data.Entity.Infrastructure。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using System.Data.Entity.Infrastructure; ...
替换类声明以扩展 DbContext 类:声明公共 DBSet 并重写 OnModelCreating 方法。 此步骤后,你将获得一个域类,该类将模型与 Entity Framework 链接。 为此,请将类代码替换为以下内容:
(代码片段 - 模型和数据访问 - Ex2 Code First MusicStoreEntities)
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Data.Entity; using System.Data.Entity.Infrastructure; namespace MvcMusicStore.Models { public class MusicStoreEntities : DbContext { public DbSet<Genre> Genres { get; set; } public DbSet<Album> Albums { get; set; } public DbSet<Artist> Artists { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<Genre>().ToTable("Genres"); modelBuilder.Entity<Album>().ToTable("Albums"); modelBuilder.Entity<Artist>().ToTable("Artists"); base.OnModelCreating(modelBuilder); } } }
注意
使用 Entity Framework DbContext 和 DBSet ,可以查询 POCO 类流派。 通过扩展 OnModelCreating 方法,可以在代码中指定流派如何映射到数据库表。 可以在以下 msdn 文章中找到有关 DBContext 和 DBSet 的详细信息: 链接
任务 4 - 查询数据库
在此任务中,你将更新 StoreController 类,这样,它就不会使用硬编码的数据,而是从数据库检索它。
注意
此任务与练习 1 很常见。
如果已完成练习 1,则会注意到这两种方法(数据库优先或代码优先)中的这些步骤相同。 它们与数据与模型链接的方式不同,但对数据实体的访问在控制器中尚是透明的。
打开 Controllers\StoreController.cs并将以下字段添加到类,以保存名为 storeDB 的 MusicStoreEntities 类的实例:
(代码片段 - 模型和数据访问 - Ex1 storeDB)
public class StoreController : Controller { private MusicStoreEntities storeDB = new MusicStoreEntities(); ... }
MusicStoreEntities 类公开数据库中每个表的集合属性。 更新 Browse 操作方法,以检索包含所有专辑的流派。
(代码片段 - 模型和数据访问 - Ex2 应用商店浏览)
public ActionResult Browse(string genre) { // Retrieve Genre and its Associated Albums from database var genreModel = new Genre { Name = genre, Albums = this.storeDB.Albums.ToList() }; return this.View(genreModel); }
注意
你正在使用名为 LINQ 的 .NET 功能(语言集成查询)对这些集合编写强类型查询表达式,这将针对数据库执行代码,并返回可对其编程的对象。
有关 LINQ 的详细信息,请访问 msdn 站点。
更新 索引 操作方法以检索所有流派。
(代码片段 - 模型和数据访问 - Ex2 存储索引)
public ActionResult Index() { var genres = this.storeDB.Genres; return this.View(genres); }
更新 索引 操作方法以检索所有流派并将集合转换为列表。
(代码片段 - 模型和数据访问 - Ex2 Store GenreMenu)
// GET: /Store/GenreMenu [ChildActionOnly] public ActionResult GenreMenu() { var genres = this.storeDB.Genres.Take(9).ToList(); return this.PartialView(genres); }
任务 5 - 运行应用程序
在此任务中,你将检查“存储索引”页现在是否显示数据库中存储的流派,而不是硬编码的流派。 无需更改视图模板,因为 StoreController 返回与以前相同的 StoreIndexViewModel ,但这次数据将来自数据库。
重新生成解决方案,然后按 F5 运行应用程序。
项目在主页中启动。 验证流派菜单不再是硬编码列表,并且数据是从数据库直接检索的。
从数据库浏览流派
现在浏览到任何流派,并验证专辑是否已从数据库填充。
从数据库浏览相册
练习 3:使用参数查询数据库
在本练习中,你将了解如何使用参数查询数据库,以及如何使用查询结果调整,该功能可减少数据库以更高效的方式检索数据。
注意
有关查询结果调整的详细信息,请访问以下 msdn 文章。
任务 1 - 修改 StoreController 以从数据库检索相册
在此任务中 ,你将更改 StoreController 类以访问数据库以从特定流派检索专辑。
如果要使用 Code-First 方法或 Source\Ex3-QueryingTheDatabaseWithParametersCodeFirst\Begin 文件夹,请打开位于 Source\Ex3-QueryingTheDatabaseWithParametersDBFirst\Begin 文件夹的 Begin 解决方案。 否则,可以继续使用 通过完成上一练习获得的 End 解决方案。
如果打开提供的 Begin 解决方案,则需要先下载一些缺少的 NuGet 包,然后再继续。 为此,请单击“项目”菜单,然后选择“管理 NuGet 包”。
在“管理 NuGet 包”对话框中,单击“还原”以下载缺少的包。
最后,通过单击“生成 | 生成解决方案”生成解决方案来生成解决方案。
注意
使用 NuGet 的优点之一是无需交付项目中的所有库,从而减少项目大小。 借助 NuGet Power Tools,通过在 Packages.config 文件中指定包版本,可以在首次运行项目时下载所有必需的库。 因此,在从此实验室打开现有解决方案后,必须运行这些步骤。
打开 StoreController 类以更改 Browse 操作方法。 为此,请在解决方案资源管理器中展开“控制器”文件夹,然后双击StoreController.cs。
更改“浏览”操作方法以检索特定流派的专辑。 为此,请替换以下代码:
(代码片段 - 模型和数据访问 - Ex3 StoreController BrowseMethod)
public ActionResult Browse(string genre) { // Retrieve Genre and its Associated Albums from database var genreModel = this.storeDB.Genres.Include("Albums") .Single(g => g.Name == genre); return this.View(genreModel); }
注意
若要填充实体的集合,需要使用 Include 方法指定也想要检索专辑。 可以使用 .LINQ 中的 Single() 扩展,因为在这种情况下,专辑只需要一个流派。 Single() 方法采用 Lambda 表达式作为参数,在本例中指定单个流派对象,以便其名称与定义的值匹配。
你将利用一项功能来指示希望在检索流派对象时加载的其他相关实体。 此功能称为 查询结果整形,使你能够减少访问数据库以检索信息所需的次数。 在此方案中,需要为检索的流派预提取专辑。
查询包括 流派.Include(“Albums”), 以指示你也希望相关的专辑。 这将导致更高效的应用程序,因为它将在单个数据库请求中检索流派和专辑数据。
任务 2 - 运行应用程序
在此任务中,你将运行应用程序并从数据库中检索特定流派的相册。
按 F5 运行应用程序。
项目在主页中启动。 将 URL 更改为 /Store/Browse?genre=Pop ,以验证是否正在从数据库中检索结果。
浏览 /Store/Browse?genre=Pop
任务 3 - 按 ID 访问相册
在此任务中,你将重复前面的过程,按其 ID 获取专辑。
根据需要关闭浏览器,以返回到 Visual Studio。 打开 StoreController 类以更改 Details 操作方法。 为此,请在解决方案资源管理器中展开“控制器”文件夹,然后双击StoreController.cs。
更改 Details 操作方法,以根据专辑 ID 检索专辑详细信息。为此,请替换以下代码:
(代码片段 - 模型和数据访问 - Ex3 StoreController DetailsMethod)
// GET: /Store/ public ActionResult Details(int id) { var album = this.storeDB.Albums.Find(id); if (album == null) { return this.HttpNotFound(); } return this.View(album); }
任务 4 - 运行应用程序
在此任务中,你将在 Web 浏览器中运行应用程序,并通过其 ID 获取专辑详细信息。
按 F5 运行应用程序。
项目在主页中启动。 将 URL 更改为 /Store/Details/51 或浏览流派,然后选择一张专辑以验证是否从数据库检索结果。
浏览 /Store/Details/51
注意
此外,可以按照 附录 B 将此应用程序部署到 Windows Azure 网站:使用 Web 部署发布 ASP.NET MVC 4 应用程序。
总结
通过完成此动手实验室,你已学习了 ASP.NET MVC 模型和数据访问的基础知识,使用 数据库优先 方法和 代码优先 方法:
- 如何将数据库添加到解决方案以使用其数据
- 如何更新控制器,为视图模板提供从数据库获取的数据,而不是硬编码的模板
- 如何使用参数查询数据库
- 如何使用查询结果整形,该功能可减少数据库访问次数,以更高效的方式检索数据
- 如何在 Microsoft Entity Framework 中使用 Database First 和 Code First 方法将数据库与模型链接
附录 A:安装 Visual Studio Express 2012 for Web
可以使用 Microsoft Web 平台安装程序 安装 Microsoft Visual Studio Express 2012 for Web 或其他“Express”版本。 以下说明指导你完成使用 Microsoft Web 平台安装程序 安装 Visual Studio Express 2012 for Web 所需的步骤。
转到 [/iis/extensions/introduction-to-iis-express/iis-express-overview?linkid=9810169](/iis/extensions/introduction-to-iis-express/iis-express-overview?linkid=9810169)。 或者,如果已安装 Web 平台安装程序,可以打开它并搜索产品“Visual Studio Express 2012 for Web with Windows Azure SDK”。
单击“立即安装”。 如果没有 Web 平台安装程序 ,将重定向以先下载并安装它。
Web 平台安装程序打开后,单击“安装”以启动安装程序。
安装 Visual Studio Express
阅读所有产品的许可证和条款,然后单击“我接受”继续。
接受许可条款
等待下载和安装过程完成。
安装进度
安装完成后,单击“ 完成”。
安装已完成
单击“退出”关闭 Web 平台安装程序。
若要打开 Visual Studio Express for Web,请转到“开始”屏幕并开始编写“VS Express”,然后单击 VS Express for Web 磁贴。
VS Express for Web 磁贴
附录 B:使用 Web 部署发布 ASP.NET MVC 4 应用程序
本附录介绍如何从 Windows Azure 管理门户创建新网站,并发布通过遵循实验室获取的应用程序,并利用 Windows Azure 提供的 Web 部署发布功能。
任务 1 - 从 Windows Azure 门户创建新网站
转到 Windows Azure 管理门户 ,使用与订阅关联的Microsoft凭据登录。
注意
借助 Windows Azure,可以免费托管 10 个 ASP.NET 网站,然后在流量增长时进行缩放。 可以在此处注册。
登录到 Windows Azure 管理门户
单击命令栏上的“ 新建 ”。
创建新网站
单击“计算 | 网站”。 然后选择“快速创建”选项。 提供新网站的可用 URL,然后单击“ 创建网站”。
注意
Windows Azure 网站是云中运行的 Web 应用程序的主机,可以控制和管理这些应用程序。 使用“快速创建”选项,可以从门户外部将已完成的 Web 应用程序部署到 Windows Azure 网站。 它不包括设置数据库的步骤。
使用快速创建创建新网站
等到新 网站 创建。
创建网站后,单击 URL 列下的链接。 检查新网站是否正常工作。
浏览到新网站
正在运行的网站
返回到门户,单击“名称”列下的网站名称以显示管理页。
打开网站管理页
在 “仪表板 ”页的 “快速概览 ”部分下,单击“ 下载发布配置文件 ”链接。
注意
发布 配置文件 包含将 Web 应用程序发布到每个已启用发布方法的 Windows Azure 网站所需的所有信息。 发布配置文件包含连接并针对启用发布方法的每个终结点进行身份验证所需的 URL、用户凭据和数据库字符串。 Microsoft WebMatrix 2,Microsoft Visual Studio Express for Web 和 Microsoft Visual Studio 2012 支持读取发布配置文件,以自动配置这些程序,以便将 Web 应用程序发布到 Windows Azure 网站。
下载网站发布配置文件
将发布配置文件下载到已知位置。 在本练习中,你将了解如何使用此文件将 Web 应用程序从 Visual Studio 发布到 Windows Azure 网站。
保存发布配置文件
任务 2 - 配置数据库服务器
如果应用程序使用 SQL Server 数据库,则需要创建SQL 数据库服务器。 如果要部署不使用 SQL Server 的简单应用程序,可以跳过此任务。
需要SQL 数据库服务器来存储应用程序数据库。 可以在 Sql 数据库服务器 | 服务器的仪表板的 Windows Azure 管理门户中查看订阅中的SQL 数据库服务器。 | 如果没有创建服务器,可以使用命令栏上的“添加”按钮创建一个服务器。 记下 服务器名称和 URL、管理员登录名和密码,因为你将在下一个任务中使用它们。 尚未创建数据库,因为它将在后面的阶段创建。
SQL 数据库服务器仪表板
在下一个任务中,你将测试 Visual Studio 中的数据库连接,因此需要在服务器的“允许 IP 地址” 列表中包括本地 IP 地址。 为此,请单击“配置”,选择当前客户端 IP 地址中的 IP 地址,并将其粘贴到“开始 IP 地址”和“结束 IP 地址”文本框中,然后单击该按钮。
添加客户端 IP 地址
将客户端 IP 地址添加到允许的 IP 地址列表后,单击“保存”以确认更改。
确认更改
任务 3 - 使用 Web 部署发布 ASP.NET MVC 4 应用程序
返回到 ASP.NET MVC 4 解决方案。 在解决方案资源管理器中,右键单击网站项目并选择“发布”。
发布网站
导入在第一个任务中保存的发布配置文件。
导入发布配置文件
单击“ 验证连接”。 验证完成后,单击“ 下一步”。
注意
在“验证连接”按钮旁边显示绿色复选标记后,验证将完成。
验证连接
在“设置”页的“数据库”部分下,单击数据库连接文本框(即 DefaultConnection)旁边的按钮。
Web 部署配置
按如下所示配置数据库连接:
在“服务器名称”中,使用 tcp: 前缀键入SQL 数据库服务器 URL。
在 “用户名 ”中,键入服务器管理员登录名。
在 “密码 ”中,键入服务器管理员登录密码。
键入新的数据库名称。
配置目标连接字符串
然后单击“确定” 。 当系统提示创建数据库时,单击“ 是”。
创建数据库
用于连接到 Windows Azure 中的SQL 数据库连接字符串显示在“默认连接”文本框中。 然后单击“下一步”。
指向SQL 数据库的连接字符串
在 “预览 ”页中,单击“ 发布”。
发布 Web 应用程序
发布过程完成后,默认浏览器将打开已发布的网站。
附录 C:使用代码片段
使用代码片段时,只需用手指提示即可获取所有代码。 实验室文档将准确告诉你何时可以使用它们,如下图所示。
使用 Visual Studio 代码片段将代码插入项目中
使用键盘添加代码片段(仅限 C#)
- 将光标置于要插入代码的位置。
- 开始键入代码段名称(不含空格或连字符)。
- 观看 IntelliSense 显示匹配的代码段名称。
- 选择正确的代码段(或在选择整个代码段名称之前继续键入)。
- 按 Tab 键两次在光标位置插入代码片段。
开始键入代码段名称
按 Tab 选择突出显示的代码片段
再次按 Tab,代码片段将展开
使用鼠标(C#、Visual Basic 和 XML) 1 添加代码片段。 右键单击要插入代码片段的位置。
- 选择“ 插入代码段 ”, 然后选择“我的代码片段”。
- 通过单击相关代码片段从列表中选择相关代码片段。
右键单击要插入代码片段的位置,然后选择“插入代码段”
通过单击相关代码片段从列表中选择相关代码片段