使用 Visual Studio 或 Visual Web Developer 通过 SQL Server Compact 部署 ASP.NET Web 应用程序:部署数据库更新 - 第 9 个,共 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版本,以及如何部署到 Azure 应用服务 Web 应用,请参阅使用 Visual Studio ASP.NET Web 部署

概述

在本教程中,你将进行数据库更改和相关代码更改,在 Visual Studio 中测试更改,然后将更新部署到测试和生产环境。

提醒:如果在完成本教程时收到错误消息或某些内容不起作用,请务必检查故障排除页面

向表添加新列

在本部分中,将向 和 Instructor 实体的Person基类Student添加出生日期列。 然后更新显示讲师数据的页面,使其显示新列。

ContosoUniversity.DAL 项目中,打开 Person.cs 并在类的 Person 末尾添加以下属性, () 后应有两个右大括号:

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(Name = "Birth Date")]
public DateTime? BirthDate { get; set; }

接下来,更新 Seed 方法,使其为新列提供值。 打开 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"), 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"), 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") }
};

在 ContosoUniversity 项目中,打开 Instructors.aspx 并添加新模板字段以显示出生日期。 在雇用日期和办公室分配之间添加它:

<asp:TemplateField HeaderText="Birth Date" SortExpression="BirthDate">
    <ItemTemplate>
        <asp:Label ID="InstructorBirthDateLabel" runat="server" Text='<%# Eval("BirthDate", "{0:d}") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="InstructorBirthDateTextBox" runat="server" Text='<%# Bind("BirthDate", "{0:d}") %>'
            Width="7em"></asp:TextBox>
    </EditItemTemplate>
</asp:TemplateField>

(如果代码缩进不同步,可以按 CTRL-K,然后按 CTRL-D 自动重新格式化文件。)

生成解决方案,然后打开 “包管理器控制台” 窗口。 确保仍选择 ContosoUniversity.DAL 作为 默认项目

“包管理器控制台” 窗口中,选择 “ContosoUniversity.DAL” 作为 “默认项目”,然后输入以下命令:

add-migration AddBirthDate

此命令完成后,Visual Studio 将打开定义新 DbMigration 类的类文件,在 方法中 Up ,可以看到创建新列的代码。

AddBirthDate_migration_code

生成解决方案,然后在 “包管理器控制台” 窗口中输入以下命令, (确保仍) 选择 ContosoUniversity.DAL 项目:

update-database

命令完成后,运行应用程序并选择“讲师”页。 加载页面时,会看到它具有新的出生日期字段。

Instructors_page_with_birth_date

将数据库更新部署到测试环境

解决方案资源管理器选择 ContosoUniversity 项目。

“Web 一键式发布 ”工具栏中,选择“ 测试 发布”配置文件,然后单击“ 发布 Web”。 (如果工具栏已禁用,请在 解决方案资源管理器.) 中选择 ContosoUniversity 项目

Visual Studio 部署更新的应用程序,浏览器将打开主页。 运行“讲师”页,验证是否已成功部署更新。 当应用程序尝试访问此页的数据库时,Code First 将更新数据库架构并运行 Seed 方法。 显示页面时,会看到预期的 “出生日期” 列,其中包含日期。

Instructors_page_with_birth_date_Test

将数据库更新部署到生产环境

现在可以部署到生产环境。 唯一的区别是,你将使用 app_offline.htm 来阻止用户访问站点,从而在部署更改时更新数据库。 对于生产部署,请执行以下步骤:

  • app_offline.htm 文件上传到生产站点。
  • 在 Visual Studio 中,在 “Web 一键式发布 ”工具栏中选择“生产”配置文件,然后单击“ 发布 Web”。
  • 从生产站点中删除 app_offline.htm 文件。

注意

在生产环境中使用应用程序时,应实施备份计划。 也就是说,应定期将 School-Prod.sdfaspnet-Prod.sdf 文件从生产站点复制到安全存储位置,并且应保留几代此类备份。 更新数据库时,应在更改前立即创建备份副本。 然后,如果犯了错误,并且直到将其部署到生产环境后才发现它,则仍然可以将数据库恢复到它损坏之前的状态。

当 Visual Studio 在浏览器中打开主页 URL 时,将显示 app_offline.htm 页。 删除 app_offline.htm 文件后,可以再次浏览到主页,以验证是否已成功部署更新。

Instructors_page_with_birth_date_Prod

现已部署应用程序更新,其中包括对测试和生产的数据库更改。 下一教程介绍如何将数据库从SQL Server Compact迁移到SQL Server Express和SQL Server。