1. 综述
本章节展示的是如何向完整版SQL Server 数据库部署一个数据库升级。与第9章的数据库升级部署有所不同(第9章是部署到SQL Server Compact数据库)。
提醒:如果根据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面。
2. 给表添加新列
这个小节,做一个数据库修改和相应的代码更新,在部署到测试和生产环境之前,先在Visual Studio 里测试。修改内容是给Instructor 实体添加一个OfficeHours 列,然后再Instructors 页面上显示。
ContosoUniversity.DAL项目里打开Instructor.cs文件,在HireDate和Courses之间添加如下代码:
[MaxLength(50)] public string OfficeHours { get; set; }
更新初始化器类,以便添加测试数据。打开SchoolInitializer.cs文件替换以var instructors = new List<Instructor>开头的代码块:
View
Code
在ContosoUniversity项目,打开Instructors.aspx文件,在</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>
运行程序,访问Instructors页面,运行稍微有点慢,因为Entity Framework需要重新创建数据库和插入数据:
3. 为数据库更新创建SQL脚本
前面章节的SQL Server Compact 数据库修改部署,然后同样的方式部署测试和生产环境,但在本章这种方式不行,你需要创建SQL脚本来更新数据库,因为完整版SQL Server 数据库不能通过像SQL Server Compact 数据库一样通过复制的方式来部署。第9章指出有可以进行数据库比较然后自动创建数据库更新脚本。本章节,将已经生产的脚本提供给你。
想知道Code First为数据库做了什么,重新打开Server Explorer,你需要添加一个connection连接到新数据库SchoolDev上。
Server Explorer里,右键Data Connections,选择Add Connection,在Add Connection对话框的Server Name里输入.\SQLExpress,然后打开Select or enter a database name下拉菜单选择SchoolDev数据库。
展开SchoolDev->Tables->Person->Columns,可以看到OfficeHours列。
在Properties窗口,可以看到这个列的数据类型是nvarchar ,长度是50。
在Server Explorer里,右键SchoolDev数据库,选择Close Connection。
下面的脚本是添加一个列到Person表, table,复制这些脚本保存成AddOfficeHoursColumn.sql文件,放到SolutionFiles方案文件夹里。
View
Code
你也可以创建一个脚本更新OfficeHours 列的数据,不过,程序部署以后用户自己会更新这个值的。
4. 部署数据库更新到测试环境
对于测试环境,在第一次部署时用到的schema 脚本,数据插入脚本,赋权脚本都不能再执行了。在这里你只需要执行刚才新建立的SQL脚本。
打开Project Properties窗口选择Package/Publish Web选项卡,确保Configuration框里选择Active (Test)或Test。
确保选择了Include all databases configured in Package/Publish SQL tab项。
选择Package/Publish SQL选项卡,确保Configuration还是Test,在Database Entries表格里,取消选择DefaultConnection-Deployment,因为不需要更新这个membership数据库。
在Database Entries表格里,选择SchoolContext-Deployment行以便设置School数据库的配置信息。
在Database Entry Details面板取消选择Database Scripts表格里的2个行,取消Pull data and/or schema from an existing database项。
在Database Scripts表里点击Add Script,在弹出的Select File对话框里选择AddOfficeHoursColumn.sql 文件,点击Open。
完成以后,Package/Publish SQL选项卡应该是这样的:
在Solution Configurations下拉菜单选择Test,在Publish profile下拉菜单里选择Test,点击Publish Web。(如果你自定义了你的Visual Studio使这些工具栏的这些设置不能用的话,请参考第8章的内容)
Visual Studio部署了修改后的程序,并在Output窗口显示了成功信息。
重新运行程序,验证部署结果是否正常,这时候你将看到多了一个office hours新列,当你编辑一个instructor 的时候,Office Hours 的值就会添加到该列里了。
5. 部署数据库更新到生产环境
除了在部署前上传app_offline.htm文件,部署后删除该文件以外,其它的部署流程和部署测试环境的流程是一模一样的。
完成配置以后,Package/Publish SQL选项卡应该是这样的:
完成以后,可以部署到生产环境了。在Solution Configurations下拉菜单里选择Release ,在Publish下拉菜单里选择Production,点击Publish Web。(如果你自定义了你的Visual Studio使这些工具栏的这些设置不能用的话,请参考第8章的内容)
Visual Studio部署了修改后的程序,并在Output窗口显示了成功信息。
测试之前,需要删除app_offline.htm文件。
重新打开程序,验证该部署是否正常。下图显示,Office Hours列上显示了编辑的数据,也就是部署是OK的。
现在已经成功部署了含有数据库更新的程序,在部署到SQL Server Express和SQL Server的时候试用了同样的SQL脚步。
6. 更多信息
至此,部署ASP.NET 程序到第三方提供商的教材已经全部结束了,诸如如何使用一个部署包部署ContosoUniversity程序的话,请参看:Using a Web Deploy package to deploy to IIS on the dev box and to a third party host。更多类似的文章,请参看: ASP.NET
Deployment Content Map。
版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。