使用 Visual Studio 或 Visual Web Developer 通过SQL Server Compact部署 ASP.NET Web 应用程序:迁移到 SQL Server - 10(共 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 部署

概述

本教程介绍如何从 SQL Server Compact 迁移到 SQL Server。 你可能希望这样做的一个原因是利用SQL Server Compact不支持的SQL Server功能,例如存储过程、触发器、视图或复制。 有关SQL Server Compact和SQL Server之间的差异的详细信息,请参阅部署SQL Server Compact教程。

SQL Server Express与完整的开发SQL Server

决定升级到 SQL Server 后,可能需要在开发和测试环境中使用 SQL Server 或 SQL Server Express。 除了在工具支持和数据库引擎功能方面存在差异外,SQL Server Compact和其他版本的 SQL Server 之间的提供程序实现也存在差异。 这些差异可能会导致相同的代码生成不同的结果。 因此,如果决定将SQL Server Compact保留为开发数据库,则应在每次部署到生产环境之前,在测试环境中SQL Server或SQL Server Express全面测试站点。

与SQL Server Compact不同,SQL Server Express本质上是相同的数据库引擎,并且使用与完整SQL Server相同的 .NET 提供程序。 使用SQL Server Express进行测试时,可以确信获得与SQL Server相同的结果。 可以将大多数相同的数据库工具与SQL Server Express一起使用,SQL Server (SQL Server Profiler ) 的显著异常,并且它支持SQL Server的其他功能,如存储过程、视图、触发器和复制。 (通常必须在生产网站中使用完整SQL Server。SQL Server Express可以在共享托管环境中运行,但它不是为此设计的,许多托管提供商不支持它。)

如果使用 Visual Studio 2012,则通常为开发环境选择 SQL Server Express LocalDB,因为这是 Visual Studio 默认安装的内容。 但是,LocalDB 在 IIS 中不起作用,因此对于测试环境,必须使用 SQL Server 或 SQL Server Express。

组合数据库与保持数据库分离

Contoso University 应用程序有两个SQL Server Compact数据库:成员资格数据库 (aspnet.sdf) ,应用程序数据库 (School.sdf) 。 迁移时,可以将这些数据库迁移到两个单独的数据库或单个数据库。 你可能希望将它们组合在一起,以便于应用程序数据库与成员资格数据库之间的数据库联接。 托管计划可能还会提供合并它们的理由。 例如,托管提供程序可能会对多个数据库收取更多费用,甚至可能不允许多个数据库。 本教程使用的 Cytanium Lite 托管帐户就是这种情况,该帐户仅允许一个SQL Server数据库。

在本教程中,你将采用以下方式迁移两个数据库:

  • 迁移到开发环境中的两个 LocalDB 数据库。
  • 迁移到测试环境中的两个SQL Server Express数据库。
  • 迁移到生产环境中一个组合的完整SQL Server数据库。

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

安装SQL Server Express

默认情况下,SQL Server Express在 Visual Studio 2010 中自动安装,但默认情况下不会随 Visual Studio 2012 一起安装。 若要安装 SQL Server 2012 Express,请单击以下链接

选择 “ENU/x64/SQLEXPR_x64_ENU.exe ”或 “ENU/x86/SQLEXPR_x86_ENU.exe”,并在安装向导中接受默认设置。 有关安装选项的详细信息,请参阅从安装向导安装 (安装程序) 安装 SQL Server 2012

为测试环境创建SQL Server Express数据库

下一步是创建 ASP.NET 成员资格和学校数据库。

在“视图”菜单中,在 Visual Web Developer) 中选择“服务器资源管理器” (“数据库资源管理器”,然后右键单击“数据Connections并选择”新建SQL Server数据库”。

Selecting_Create_New_SQL_Server_Database

在“新建SQL Server数据库”对话框中,在“服务器名称”框中输入“.\SQLExpress”,在“新建数据库名称”框中输入“aspnet-Test”,然后单击“确定”。

Create_New_SQL_Server_Database_aspnet

按照相同的过程创建名为“School-Test”的新SQL Server Express School 数据库。

(你要将这些数据库名称追加“Test”,因为稍后将为每个数据库创建一个额外的实例,用于开发环境,并且需要能够区分两组数据库。)

服务器资源管理器 现在显示两个新数据库。

New_databases_in_Server_Explorer

为新数据库创建授权脚本

当应用程序在开发计算机上的 IIS 中运行时,应用程序将使用默认应用程序池的凭据访问数据库。 但是,默认情况下,应用程序池标识没有打开数据库的权限。 因此,必须运行脚本来授予该权限。 在本部分中,将创建稍后将运行的脚本,以确保应用程序在 IIS 中运行时可以打开数据库。

在部署到生产环境教程中创建的解决方案的 SolutionFiles 文件夹中,创建名为 Grant.sql 的新 SQL 文件。 将以下 SQL 命令复制到 文件中,然后保存并关闭该文件:

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [ContosoUniversityUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'ContosoUniversityUser'
GO

注意

此脚本旨在与 SQL Server 2008 以及 Windows 7 中的 IIS 设置一起使用,如本教程中所述。 如果你使用的是不同版本的 SQL Server 或 Windows,或者以不同的方式在计算机上设置 IIS,则可能需要更改此脚本。 有关SQL Server脚本的详细信息,请参阅联机丛书SQL Server

注意

安全说明 此脚本为在运行时访问数据库的用户提供db_owner权限,这是在生产环境中拥有的权限。 在某些情况下,你可能希望指定仅对部署具有完整数据库架构更新权限的用户,并在运行时指定仅对数据具有读取和写入权限的其他用户。 有关详细信息,请参阅作为测试环境部署到 IIS 中的查看Code First 迁移的自动 Web.config 更改

为测试环境配置数据库部署

接下来,你将配置 Visual Studio,以便它将为每个数据库执行以下任务:

  • 生成一个 SQL 脚本,该脚本 (目标数据库中的表、列、约束等 ) 创建源数据库的结构。
  • 生成一个 SQL 脚本,该脚本将源数据库的数据插入目标数据库中的表中。
  • 在目标数据库中运行生成的脚本和创建的授予脚本。

打开“ 项目属性” 窗口,然后选择“ 打包/发布 SQL ”选项卡。

确保在“配置”下拉列表中选择“活动 (发布) ”或“发布”。

单击“ 启用此页面”。

Package_Publish_SQL_tab_Enable_This_page

通常禁用 “包/发布 SQL ”选项卡,因为它指定了旧部署方法。 在大多数情况下,应在 发布 Web 向导中配置数据库部署。 从SQL Server Compact迁移到SQL Server或SQL Server Express是一种特殊情况,此方法是一个不错的选择。

单击“ 从 Web.config导入 ”。

Selecting_Import_from_Web.config

Visual Studio 在 Web.config 文件中查找连接字符串,为成员资格数据库查找连接字符串,为 School 数据库查找连接字符串,并在“数据库条目”表中添加一个对应于每个连接字符串的行。 它找到的连接字符串适用于现有SQL Server Compact数据库,下一步是配置部署这些数据库的方式和位置。

在“数据库 条目详细信息” 部分的“ 数据库条目 ”表下方输入数据库部署设置。 “数据库条目详细信息”部分中显示的设置与“数据库条目”表中选择的行相关,如下图所示。

Database_Entry_Details_section_of_Package_Publish_SQL_tab

为成员资格数据库配置部署设置

选择“数据库条目”表中的“DefaultConnection-Deployment”行,以配置应用于成员资格数据库的设置。

“目标数据库的连接字符串”中,输入指向新SQL Server Express成员资格数据库的连接字符串。 可以从服务器资源管理器获取所需的连接字符串。 在“服务器资源管理器”中,展开“数据Connections并选择 aspnetTest 数据库,然后从”属性“窗口中复制”连接字符串“值。

aspnet_connection_string_in_Server_Explorer

此处将重现相同的连接字符串:

Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False

将此连接字符串复制并粘贴到“包/发布 SQL”选项卡中的目标数据库的连接字符串中。

确保已选择 “从现有数据库拉取数据和/或架构 ”。 这就是导致 SQL 脚本自动生成并在目标数据库中运行的原因。

源数据库值的连接字符串Web.config 文件中提取,并指向开发SQL Server Compact数据库。 这是将用于生成稍后将在目标数据库中运行的脚本的源数据库。 由于要部署数据库的生产版本,请将“aspnet-Dev.sdf”更改为“aspnet-Prod.sdf”。

数据库脚本选项“仅架构” 更改为 “架构和数据”,因为你想要将数据 (用户帐户和角色) 以及数据库结构。

若要配置部署以运行之前创建的授权脚本,必须将其添加到 “数据库脚本” 部分。 单击“ 添加脚本”,然后在“ 添加 SQL 脚本 ”对话框中,导航到存储授权脚本的文件夹 (这是包含解决方案文件) 的文件夹。 选择名为 Grant.sql 的文件,然后单击“ 打开”。

Select_File_dialog_box_grant_script

数据库条目中的 DefaultConnection-Deployment 行的设置现在如下图所示:

Database_Entry_Details_for_DefaultConnection_Test

配置学校数据库的部署设置

接下来,选择“数据库条目”表中的“SchoolContext-Deployment”行,以便为 School 数据库配置部署设置。

可以使用前面使用的相同方法来获取新SQL Server Express数据库的连接字符串。 将此连接字符串复制到“包/发布 SQL”选项卡中目标数据库的连接字符串中。

Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False

确保已选择 “从现有数据库拉取数据和/或架构 ”。

源数据库值的连接字符串Web.config 文件中提取,并指向开发SQL Server Compact数据库。 将“School-Dev.sdf”更改为“School-Prod.sdf”以部署数据库的生产版本。 (你从未在 App_Data 文件夹中创建 School-Prod.sdf 文件,因此稍后会将该文件从测试环境复制到 ContosoUniversity 项目文件夹中的 App_Data 文件夹。)

“数据库脚本选项” 更改为 “架构和数据”。

你还希望运行该脚本,以向应用程序池标识授予对此数据库的读取和写入权限,因此请添加 Grant.sql 脚本文件,就像对成员身份数据库所做的那样。

完成后,“数据库条目”中的 SchoolContext-Deployment 行的设置如下图所示:

Database_Entry_Details_for_SchoolContext_Test

将更改保存到“ 打包/发布 SQL ”选项卡。

School-Prod.sdf 文件从 c:\inetpub\wwwroot\ContosoUniversity\App_Data 文件夹复制到 ContosoUniversity 项目中的 App_Data 文件夹。

为授权脚本指定事务处理模式

部署过程生成用于部署数据库架构和数据的脚本。 默认情况下,这些脚本在事务中运行。 但是,默认情况下,自定义脚本 (如授权脚本) 不会在事务中运行。 如果部署过程混合了事务模式,则可能会在部署期间运行脚本时收到超时错误。 在本部分中,将编辑项目文件,以便将自定义脚本配置为在事务中运行。

“解决方案资源管理器”中,右键单击“ContosoUniversity”项目,然后选择“卸载项目”。

Unload_Project_in_Solution_Explorer

然后再次右键单击该项目,并选择 “编辑 ContosoUniversity.csproj”。

Edit_Project_in_Solution_Explorer

Visual Studio 编辑器显示项目文件的 XML 内容。 请注意,有几个 PropertyGroup 元素。 (在图像中,省略了元素的内容 PropertyGroup 。)

项目文件编辑器窗口

第一个不 Condition 具有属性的设置适用于无论生成配置如何都适用的设置。 一个 PropertyGroup 元素仅适用于调试生成配置 (请注意 Condition 属性) ,一个元素仅适用于发布生成配置,另一个元素仅适用于测试生成配置。 在 PropertyGroup “发布生成”配置的 元素中,你将看到一个 PublishDatabaseSettings 元素,其中包含你在“ 打包/发布 SQL ”选项卡上输入的设置。有一个 Object 元素对应于你指定的每个授权脚本 (注意“Grant.sql”) 的两个实例。 默认情况下, Transacted 每个授权脚本的 Source 元素的 属性为 False

Transacted_false

将 元素的 Transacted 属性 Source 的值更改为 True

Transacted_true

保存并关闭项目文件,然后在解决方案资源管理器右键单击该项目,然后选择“重新加载项目”。

Reload_project

为连接字符串设置 Web.Config 转换

在“ 打包/发布 SQL”选项卡上输入的新 SQL Express 数据库的连接字符串仅由 Web 部署用于在部署期间更新目标数据库。 你仍必须设置 Web.config 转换,以便部署的 Web.config 文件中的连接字符串指向新的 SQL Server Express 数据库。 (使用 “包/发布 SQL ”选项卡时,无法在发布配置文件中配置连接字符串。)

打开 Web.Test.config ,将 connectionStrings 元素 connectionStrings 替换为以下示例中的 元素。 (请确保仅复制 connectionStrings 元素,而不复制此处显示的用于提供 context.)

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="SchoolContext" 
         connectionString="Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <!-- appSettings element, comments, and system.web element -->
</configuration>

此代码会导致connectionString在部署的 Web.config 文件中替换每个add元素的 和 providerName 属性。 这些连接字符串与在“打包/发布 SQL”选项卡中输入的连接字符串不同。已向其添加“MultipleActiveResultSets=True”设置,因为实体框架和通用提供程序需要此设置。

安装SQL Server Compact

SqlServerCompact NuGet 包为 Contoso University 应用程序提供SQL Server Compact数据库引擎程序集。 但现在,必须能够读取SQL Server Compact数据库,而不是应用程序,而是 Web 部署,以便创建要在SQL Server数据库中运行的脚本。 若要使 Web 部署能够读取SQL Server Compact数据库,请使用以下链接在开发计算机上安装 SQL Server Compact:Microsoft SQL Server Compact 4.0 SP1

部署到测试环境

若要发布到测试环境,必须创建一个发布配置文件,该配置文件配置为使用 “包/发布 SQL ”选项卡进行数据库发布,而不是使用发布配置文件数据库设置。

首先,删除现有的测试配置文件。

“解决方案资源管理器”中,右键单击 ContosoUniversity 项目,然后单击“发布”。

选择“ 配置文件 ”选项卡。

单击“管理配置文件”

选择“ 测试”,单击“ 删除”,然后单击“ 关闭”。

关闭 “发布 Web ”向导以保存此更改。

接下来,创建新的测试配置文件,并使用它来发布项目。

“解决方案资源管理器”中,右键单击 ContosoUniversity 项目,然后单击“发布”。

选择“ 配置文件 ”选项卡。

从下拉列表中选择“ <新建...”> ,然后输入“测试”作为配置文件名称。

在“ 服务 URL ”框中,输入 localhost

在“ 站点/应用程序 ”框中,输入 “默认网站/ContosoUniversity”。

在“ 目标 URL ”框中,输入 http://localhost/ContosoUniversity/

单击“下一步”。

“设置”选项卡警告你“包/发布 SQL”选项卡已配置,并让你有机会通过单击“启用新的数据库发布改进”来替代它们。 对于此部署,你不希望替代 “包/发布 SQL ”选项卡设置,因此只需单击“ 下一步”。

Publish_Web_wizard_Settings_tab_Migrate

预览 ”选项卡上的消息指示 “没有选择数据库”进行发布,但这仅意味着未在发布配置文件中配置数据库发布。

单击“发布” 。

Publish_Web_wizard_Preview_tab_Migrate

Visual Studio 部署应用程序,并将浏览器打开到测试环境中站点主页。 运行“讲师”页,查看其显示的数据与之前看到的数据相同。 运行 “添加学生 ”页,添加新学生,然后在“学生”页中查看新 学生 。 这将验证 是否可以更新数据库。 选择“ 更新额度 ”页 (你将需要登录) ,以验证成员资格数据库是否已部署并且你有权访问该数据库。

为生产环境创建SQL Server数据库

部署到测试环境后,即可设置部署到生产环境。 首先创建要部署到的数据库,就像对测试环境所做的那样。 如概述中所述,Cytanium Lite 托管计划仅允许一个SQL Server数据库,因此仅设置一个数据库,而不是两个数据库。 成员资格和 School SQL Server Compact 数据库中的所有表和数据都将部署到生产中的一个SQL Server数据库中。

转到 处 http://panel.cytanium.com的 Cytanium 控制面板。 将鼠标悬停在“数据库”上,然后单击“SQL Server 2008”。

Selecting_Databases_in_Control_Panel

“SQL Server 2008”页中,单击“创建数据库”。

Selecting_Create_Database

将数据库命名为“School”,然后单击“ 保存”。 (页面会自动添加前缀“contosou”,因此有效名称将为“contosouSchool”。)

Naming_the_database

在同一页上,单击“ 创建用户”。 在 Cytanium 的服务器上,你将创建有权打开数据库的用户,而不是使用集成的 Windows 安全性和让应用程序池标识打开数据库。 将用户的凭据添加到生产 Web.config 文件中的连接字符串。 在此步骤中,将创建这些凭据。

Creating_a_database_user

“SQL 用户属性” 页中填写必填字段:

  • 输入“ContosoUniversityUser”作为名称。
  • 输入密码。
  • 选择 “contosouSchool ”作为默认数据库。
  • 选择“contosouSchool 检查”框。

SQL_User_Properties_page

为生产环境配置数据库部署

现在,你已准备好在“ 打包/发布 SQL ”选项卡中设置数据库部署设置,就像之前针对测试环境所做的那样。

打开“项目属性”窗口,选择“包/发布 SQL”选项卡,并确保在“配置”下拉列表中选择“活动 (发布) 发布”。

为每个数据库配置部署设置时,针对生产环境与测试环境执行的操作之间的主要区别在于如何配置连接字符串。 对于测试环境,你输入了不同的目标数据库连接字符串,但对于生产环境,目标连接字符串对于这两个数据库都是相同的。 这是因为要将这两个数据库部署到生产中的一个数据库。

为成员资格数据库配置部署设置

若要配置应用于成员资格数据库的设置,请在“数据库条目”表中选择“DefaultConnection-Deployment”行。

“目标数据库的连接字符串”中,输入指向刚创建的新生产SQL Server数据库的连接字符串。 可以从欢迎电子邮件获取连接字符串。 电子邮件的相关部分包含以下示例连接字符串:

Data Source=vserver01.cytanium.com;Initial Catalog={myDataBase};User Id={myUsername};Password={myPassword};

替换这三个变量后,所需的连接字符串如下所示:

Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;

将此连接字符串复制并粘贴到“包/发布 SQL”选项卡中的目标数据库的连接字符串中。

确保仍选择 “从现有数据库拉取数据和/或架构 ”,并且 “数据库脚本”选项 仍为 “架构”和“数据”。

在“数据库脚本”框中,清除Grant.sql脚本旁边的检查框。

Disable_Grant_script

配置学校数据库的部署设置

接下来,在“数据库条目”表中选择“SchoolContext-Deployment”行,以配置 School 数据库设置。

将相同的连接字符串复制到目标数据库的连接字符串中,并将其复制到成员资格数据库的该字段中。

确保仍选择 “从现有数据库拉取数据和/或架构 ”,并且 “数据库脚本”选项 仍为 “架构”和“数据”。

在“数据库脚本”框中,清除Grant.sql脚本旁边的检查框。

将更改保存到“ 打包/发布 SQL ”选项卡。

为生产数据库的连接字符串设置 Web.Config 转换

接下来,设置 Web.config 转换,使部署 的Web.config 文件中的连接字符串指向新的生产数据库。 在 Web 部署的“包/发布 SQL”选项卡上输入的连接字符串与应用程序需要使用的相同,但添加了 MultipleResultSets 选项。

打开 Web.Production.configconnectionStringsconnectionStrings 元素替换为类似于以下示例的元素。 (仅复制 元素,而不复制 connectionStrings 提供以显示 context 的周围标记。)

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="SchoolContext" 
         connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <!-- appSettings element, comments, and system.web element -->
</configuration>

有时会看到建议,建议始终加密 Web.config 文件中的连接字符串。 如果要部署到自己公司网络上的服务器,这可能很合适。 但是,在部署到共享托管环境时,你信任托管提供程序的安全做法,加密连接字符串没有必要或不切实际。

部署到生产环境

现在已准备好部署到生产环境。 Web 部署将读取项目的 App_Data 文件夹中的SQL Server Compact数据库,并在生产SQL Server数据库中重新创建其所有表和数据。 若要使用 “包/发布 Web ”选项卡设置进行发布,必须创建新的生产发布配置文件。

首先,删除现有的生产配置文件,就像之前执行测试配置文件一样。

“解决方案资源管理器”中,右键单击“ContosoUniversity”项目,然后单击“发布”。

选择“ 配置文件 ”选项卡。

单击“管理配置文件”

选择“ 生产”,单击“ 删除”,然后单击“ 关闭”。

关闭 “发布 Web ”向导以保存此更改。

接下来,创建新的生产配置文件并使用它发布项目。

“解决方案资源管理器”中,右键单击“ContosoUniversity”项目,然后单击“发布”。

选择“ 配置文件 ”选项卡。

单击“ 导入”,然后选择之前下载的 .publishsettings 文件。

在“ 连接 ”选项卡上,将 “目标 URL ”更改为正确的临时 URL,在本示例中为 http://contosouniversity.com.vserver01.cytanium.com

将配置文件重命名为“生产”。 (选择“ 配置文件 ”选项卡,然后单击“ 管理配置文件” 以执行该) 。

关闭 “发布 Web ”向导以保存更改。

在生产环境中更新数据库的实际应用程序中,在发布之前,现在需执行两个附加步骤:

  1. 上传 app_offline.htm,如 部署到生产环境 教程所示。
  2. 使用 Cytanium 控制面板 的文件管理器 功能将 aspnet-Prod.sdfSchool-Prod.sdf 文件从生产站点复制到 ContosoUniversity 项目的 App_Data 文件夹。 这可确保部署到新SQL Server数据库的数据包括生产网站的最新更新。

“Web 一键发布 ”工具栏中,确保选中 “生产 配置文件”,然后单击“ 发布”。

如果在发布之前上传 了app_offline.htm ,则必须使用 Cytanium 控制面板中的 文件管理器 实用工具删除 app_offline。测试前的 htm。 还可以同时从 App_Data 文件夹中删除 .sdf 文件。

现在可以打开浏览器并转到公共站点的 URL,以像部署到测试环境后一样测试应用程序。

在开发中切换到 SQL Server Express LocalDB

如概述中所述,通常最好在开发中使用与测试和生产中使用的相同数据库引擎。 (请记住,在开发中使用SQL Server Express的优点是,数据库在开发、测试和生产环境中的工作方式相同。) 在本部分中,你将设置 ContosoUniversity 项目,以在从 Visual Studio 运行应用程序时使用 SQL Server Express LocalDB。

执行此迁移的最简单方法是让 Code First 和成员资格系统为你创建新的开发数据库。 使用此方法进行迁移需要三个步骤:

  1. 更改连接字符串以指定新的 SQL Express LocalDB 数据库。
  2. 运行网站管理工具以创建管理员用户。 这会创建成员资格数据库。
  3. 使用 Code First 迁移 update-database 命令创建应用程序数据库并设定其种子。

更新 Web.config 文件中的连接字符串

打开 Web.config 文件, connectionStrings 并将 元素替换为以下代码:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-Dev.mdf;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
  <add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\School-Dev.mdf;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

创建成员资格数据库

“解决方案资源管理器”中,选择“ContosoUniversity”项目,然后单击“项目”菜单中的“ASP.NET 配置”。

选择“安全”选项卡。

单击“ 创建或管理角色”,然后创建 管理员 角色。

返回到“安全性”选项卡。

单击“创建用户”,然后选择“管理员检查”框并创建一个名为 admin 的用户。

关闭 网站管理工具

创建学校数据库

打开“包管理器控制台”窗口。

“默认项目 ”下拉列表中,选择“ContosoUniversity.DAL”项目。

输入以下命令:

update-database

Code First 迁移应用创建数据库的初始迁移,然后应用 AddBirthDate 迁移,然后运行 Seed 方法。

按 Control-F5 运行站点。 与测试和生产环境一样,运行 “添加学生 ”页,添加新学生,然后在“学生”页中查看新 学生 。 这将验证学校数据库是否已创建和初始化,并且你对其具有读取和写入访问权限。

选择“ 更新额度” 页并登录以验证成员身份数据库是否已部署,并且你有权访问该数据库。 如果未迁移用户帐户,请创建管理员帐户,然后选择“ 更新额度” 页以验证它是否有效。

清理SQL Server Compact文件

不再需要包含的文件和 NuGet 包来支持SQL Server Compact。 如果希望 (不需要此步骤) ,可以清理不需要的文件和引用。

解决方案资源管理器 中,从 App_Data 文件夹中删除 .sdf 文件,并从 bin 文件夹中删除 amd64x86 文件夹。

“解决方案资源管理器”中,右键单击解决方案 (非) 项目之一,然后单击“管理解决方案的 NuGet 包”。

在“ 管理 NuGet 包 ”对话框的左窗格中,选择“ 已安装的包”。

选择 EntityFramework.SqlServerCompact 包,然后单击“ 管理”。

在“ 选择项目 ”对话框中,已选中这两个项目。 若要卸载两个项目中的包,请清除两个检查框,然后单击“确定”。

在询问是否还要卸载依赖包的对话框中,单击“否”。 其中之一是必须保留的实体框架包。

按照相同的过程卸载 SqlServerCompact 包。 (必须按此顺序卸载包,因为 EntityFramework.SqlServerCompact 包依赖于 SqlServerCompact package.)

现已成功迁移到SQL Server Express和完整SQL Server。 在下一教程中,你将进行另一个数据库更改,并且你将了解如何在测试和生产数据库使用SQL Server Express和完整SQL Server时部署数据库更改。