使用 Visual Studio 或 Visual Web Developer 使用SQL Server Compact部署 ASP.NET Web 应用程序:部署SQL Server数据库更新 - 第 11 个,共 12 个
作者 :Tom Dykstra
本系列教程介绍如何使用 Visual Studio 2012 RC 或 Visual Studio Express 2012 RC for Web) 包含SQL Server Compact数据库的 ASP.NET Web 应用程序项目部署 (发布。 如果安装 Web 发布更新,也可以使用 Visual Studio 2010。 有关该系列的简介,请参阅 系列中的第一个教程。
有关显示 Visual Studio 2012 RC 版本之后引入的部署功能的教程,演示如何部署除 SQL Server Compact 以外的SQL Server版本,并演示如何部署到 Windows Azure 网站,请参阅使用 Visual Studio ASP.NET Web 部署。
概述
本教程介绍如何将数据库更新部署到完整的SQL Server数据库。 由于Code First 迁移完成更新数据库的所有工作,因此此过程与部署数据库更新教程中SQL Server Compact的过程几乎相同。
提醒:如果在完成本教程时收到错误消息或某些内容不起作用,请确保检查故障排除页面。
向表添加新列
在本教程的这一部分中,你将对数据库进行更改和相应的代码更改,然后在 Visual Studio 中对其进行测试,以准备将它们部署到测试和生产环境。 更改涉及向实体添加列OfficeHours
并在Instructor
讲师网页中显示新信息。
在 ContosoUniversity.DAL 项目中,打开Instructor.cs并在 和 Courses
属性之间HireDate
添加以下属性:
[MaxLength(50)]
public string OfficeHours { get; set; }
更新初始值设定项类,使其使用测试数据为新列种子。 打开 Migrations\Configuration.cs ,并替换以下代码块(包括新列)开头 var instructors = new List<Instructor>
的代码块:
var instructors = new List<Instructor>
{
new Instructor { FirstMidName = "Kim", LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), BirthDate = DateTime.Parse("1918-08-12"), OfficeHours = "8-9AM, 4-5PM", OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } },
new Instructor { FirstMidName = "Fadi", LastName = "Fakhouri", HireDate = DateTime.Parse("2002-07-06"), BirthDate = DateTime.Parse("1960-03-15"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } },
new Instructor { FirstMidName = "Roger", LastName = "Harui", HireDate = DateTime.Parse("1998-07-01"), BirthDate = DateTime.Parse("1970-01-11"), OfficeHours = "6AM-6PM", OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } },
new Instructor { FirstMidName = "Candace", LastName = "Kapoor", HireDate = DateTime.Parse("2001-01-15"), BirthDate = DateTime.Parse("1975-04-11") },
new Instructor { FirstMidName = "Roger", LastName = "Zheng", HireDate = DateTime.Parse("2004-02-12"), BirthDate = DateTime.Parse("1957-10-12"), OfficeHours = "By appointment only" }
};
在 ContosoUniversity 项目中,打开Instructors.aspx并添加新的模板字段,以便在第GridView
一个控件的结束</Columns>
标记之前添加办公时间:
<asp:TemplateField HeaderText="Office Hours">
<ItemTemplate>
<asp:Label ID="InstructorOfficeHoursLabel" runat="server" Text='<%# Eval("OfficeHours") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="InstructorOfficeHoursTextBox" runat="server" Text='<%# Bind("OfficeHours") %>'
Width="14em"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
生成解决方案。
打开 “包管理器控制台” 窗口,并选择“ContosoUniversity.DAL”作为 “默认”项目。
输入以下命令:
add-migration AddOfficeHoursColumn
update-database
运行应用程序并选择“ 讲师 ”页。 页面加载时间比平时要长一点,因为实体框架会重新创建数据库并使用测试数据为其设定种子。
将数据库更新部署到测试环境
使用 Code First 迁移 时,将数据库更改部署到 SQL Server 的方法与 SQL Server Compact 相同。 但是,必须更改测试发布配置文件,因为它仍设置为从SQL Server Compact迁移到SQL Server。
第一步是删除在上一教程中创建的连接字符串转换。 不再需要这些转换,因为你将在发布配置文件中指定连接字符串转换,就像将“包/发布 SQL”选项卡配置为迁移到 SQL Server 之前所做的那样。
打开 Web.Test.config 文件并删除 connectionStrings
元素。 Web.Test.config 文件中唯一剩余的转换是 元素Environment
中的 appSettings
值。
现在,可以更新发布配置文件并发布到测试环境。
打开 “发布 Web ”向导,然后切换到“ 配置文件 ”选项卡。
选择 “测试 发布”配置文件。
选择“设置”选项卡。
单击 “启用新的数据库发布改进”。
在 SchoolContext 的连接字符串框中,输入与上一教程Web.Test.config转换文件中使用的值相同:
Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True
选择“在应用程序启动) 时执行Code First 迁移 (运行。 (在 Visual Studio 版本中,检查框可能标记为“应用Code First 迁移.)
在 DefaultConnection 的连接字符串框中,输入与上一教程Web.Test.config转换文件中使用的值相同:
Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True
将 更新数据库 保留为清除状态。
单击“发布” 。
Visual Studio 将代码更改部署到测试环境,并打开浏览器到 Contoso University 主页。
选择“讲师”页。
当应用程序运行此页面时,它会尝试访问数据库。 Code First 迁移检查数据库是否是最新的,并发现尚未应用最新的迁移。 Code First 迁移应用最新的迁移,运行 Seed
方法,然后页面正常运行。 你将看到带有种子设定数据的新“办公时间”列。
将数据库更新部署到生产环境
还必须更改生产环境的发布配置文件。 在这种情况下,你将删除现有配置文件,并通过导入更新的 .publishsettings 文件创建一个新配置文件。 更新的文件将包含 Cytanium SQL Server 数据库的连接字符串。
正如部署到测试环境时所看到的那样,不再需要在Web.Production.config转换文件中连接字符串转换。 打开该文件并删除 connectionStrings
元素。 剩余的转换适用于 Environment
元素中的 appSettings
值,以及 location
限制对 Elmah 错误报告的访问的 元素。
在为生产环境创建新的发布配置文件之前,请下载更新的 .publishsettings 文件,就像之前部署到 生产环境 教程中一样。 (在 Cytanium 控制面板中,单击“网站”,然后单击 contosouniversity.com 网站。选择“Web 发布”选项卡,然后单击“下载此网站的发布配置文件”。) 执行此操作的原因是选取 .publishsettings 文件中的数据库连接字符串。 连接字符串在首次下载文件时不可用,因为你仍在使用 SQL Server Compact,并且尚未在 Cytanium 创建SQL Server数据库。
现在,可以更新发布配置文件并发布到生产环境。
打开 “发布 Web ”向导,然后切换到“ 配置文件 ”选项卡。
单击“ 管理配置文件”,然后删除生产配置文件。
关闭 “发布 Web ”向导以保存此更改。
再次打开 “发布 Web ”向导,然后单击“ 导入”。
如果使用临时 URL,请在“ 连接 ”选项卡上将 “目标 URL”更改为适当的值。
单击“下一步”。
在 “设置” 选项卡上,单击“ 启用新的数据库发布改进”。
在 SchoolContext 的连接字符串下拉列表中,选择 Cytanium 连接字符串。
选择 “执行代码优先迁移 (在应用程序启动) 运行 。
在 DefaultConnection 的连接字符串下拉列表中,选择 Cytanium 连接字符串。
选择“ 配置文件 ”选项卡,单击“ 管理配置文件”,并将配置文件从“contosouniversity.com - Web 部署”重命名为“生产”。
关闭发布配置文件以保存更改,然后再次打开它。
单击“发布” 。 (对于真正的生产网站,需要将 app_offline.htm 复制到生产环境,并在发布前将其放入项目文件夹中,然后在部署完成后将其删除。)
Visual Studio 将代码更改部署到测试环境,并打开浏览器到 Contoso University 主页。
选择“讲师”页。
Code First 迁移更新数据库的方式与在测试环境中的方式相同。 你将看到带有种子设定数据的新“办公时间”列。
现已使用 SQL Server 数据库成功部署了包含数据库更改的应用程序更新。
更多信息
这将完成有关将 ASP.NET Web 应用程序部署到第三方托管提供程序的这一系列教程。 有关这些教程中涵盖的任何主题的详细信息,请参阅 MSDN 网站上的 ASP.NET 部署内容映射 。
致谢
我要感谢以下为本教程系列内容做出重要贡献的人:
- Alberto Poblacion, MVP & MCT, 西班牙
- Jarod Ferguson,数据平台开发 MVP,美国
- Harsh Mittal,Microsoft
- Kristina Olson, Microsoft
- Mike Pope, Microsoft
- Mohit Srivastava, Microsoft
- 意大利拉斐尔·里亚迪
- Rick Anderson, Microsoft
- 赛伊德·哈希米,Microsoft (推特: @sayedihashimi)
- 斯科特·汉塞尔曼 (推特: @shanselman)
- Scott Hunter,Microsoft (twitter: @coolcsh)
- 塞尔维亚斯尔丹·博佐维奇
- Vishal Joshi,Microsoft (twitter: @vishalrjoshi)