微软ASP.NET网站部署指南(2):部署SQL Server Compact数据库

1. 综述

对于数据库訪问,Contoso University程序要求以下的软件必须随程序一起部署。由于不属于.NET Framework:

  • SQL Server Compact (数据库引擎)
  • ASP.NET Universal Providers (启用ASP.NET membership以使用SQL Server Compact)
  • Entity Framework 4.1 (Code First)

2个数据库的数据库结构和相关的一些数据都须要部署。通常。开发系统的时候都会有一些測试数据,这些測试数据跟定不能部署到生产环境。

当然,你也可能要输入一些生产环境的数据以便部署到生产环境。本章节你将配置Contoso University项目以便部署的时候包含必须的软件和数据。

提醒:假设依据本章节所做的操作出现错误信息或一些功能不正常的话。请务必check Troubleshooting页面

2. SQL Server Compact与SQL Server Express

Sample程序使用SQL Server Compact 4.0,这个数据库引擎是web站点的新选择,SQL Server Compact旧版本号是不能用在web环境的。SQL Server Compact提供了非常多经常使用的新功能,和开发部署SQL Server Express及SQL Server一样。

取决于你选择的主机提供商,SQL Server Compact可能更廉价,由于完整版的SQL Server须要额外付费。

SQL Server Compact不须要额外的付费,由于你能够自己将这个数据库引擎作为自己程序的一部分来部署。另外一个长处是备份和还原都十分简单,由于全部的数据都在部署站点app_data目录的一个.sdf文件。

备份和还原不过copy文件而已。

 

只是,你依旧须要注意它的限制。

SQL Server Compact不支持存储过程、触发器、试图、复制。(对于SQL Server 2005和SQL Server 2008支持而SQL Server Compact不支持的完整功能列表。请訪问:Differences Between SQL Server Compact and SQL Server)。还有,操作SQL Server Express 和完整版SQL Server 数据库schema和数据的一些工具也不支持SQL Compact。比如,你不能使用SQL Server Management Studio或者Visual Studio数据库项目来处理SQL Server Compact数据库。当你使用SQL Server Compact的时候,Entity Framework Code First会依据你的数据模型(data model)自己主动创建数据库。

但一旦部署以后。想保持开发环境数据库和生产环境数据库都同步的话非常难,假设有像SQL Server Management Studio一样的工具的话就简单了。

很多其它关于部署数据库差异到SQL Server Compact数据库的信息,请查看第9章。

 

SQL Server Compact是个好选择,能够用Visual Studio里的Server Explorer工具进行管理(本系列教材会将用到)。可是假设在初始部署以后须要常常改变的话,那使用SQL Server Compact 维护的成本可就大了。

 

你能够先用SQL Server Compact 然后再升级,后面的章节将告诉你怎样将SQL Server Compact迁移到SQL Server Express或者完整版SQL Server。

当然。假设你正在创建新的程序然后期望以后升级至完整版SQL Server,最好的选择是使用SQL Server Express。

3. 配置SQL Server Compact数据库引擎

Contoso University程序数据訪问须要的软件能够通过使用以下的NuGet包来安装:

  • SqlServerCompact
  • System.Web.Providers (ASP.NET universal providers)
  • EntityFramework
  • EntityFramework.SqlServerCompact

NuGet包已经帮你安装了全部该程序所须要的东西。有时候,它能改动Web.config文件或者加入build方案是须要执行的PowerShell脚本。假设你不想使用NuGet安装这些东西,你须要了解NuGet包安装的时候做的事情。以便能够手工做这些事情。

 

有个问题须要注意,SqlServerCompact NuGet包会加入一个post-build脚本到你id项目,以便copy原生的assemblies到bin目录下的x86 和amd64 子目录。可是项目默认是没有这些子目录的,结果就是在部署的时候这些文件不会copy到目标网站,须要手工来做这些事情。

(默认的部署配置就是这种,另外一个选择(该教程没有使用)。你能够改动配置行为来达到目的,请查看Configuring Project Properties 来获取资料。

不推荐这样做。由于部署的时候会带给生成环境非常多文件。)

 

Solution Explorer里。点击查看全部文件Show all Files (假设还没点的话)。可能还须要点击刷新Refresh

 

展开bin目录能够看到有amd64x86子目录,选择这2个目录。然后右键选择包括到项目里Include in Project

这时候。目录的图标会变回正常的,代表已经包括到项目里了。

 

4. 创建程序数据库

一般部署数据库的时候。都不会把开发库的全部数据都部署到生产环境,由于非常多数据都是測试用的。比如。測试库里的学生姓名都是虚构的。

另外一方面,也不能只只部署数据库结构而一点数据都不部署。

一些測试数据有可能是生产环境用到的真实数据,比如,数据库表里包括的年级值或真实的部门名称。

能够创建一个和开发环境不同版本号的数据库。一些表包括数据,一些表不包括数据。

以下的图显示的是数据库的结构:

 

该教程假定第一次部署的时候。Student和Enrollment表是空的。

其他的表上线的时候包括了一些预装载数据。以下的步骤告诉你怎样用Visual Studio的SQL Server工具删除測试数据(你不必保存測试数据由于Entity Framework Code First初始化类的时候会自己主动生成这些数据)。

 SQL Server Compact数据库包括了App_Data目录的.sdf文件。

Solution Explorer里。展开App_Data目录能够看到2个SQL Server Compact数据库.sdf文件。

 

这里是你的开发库,教程结束的时候你会有4个数据库,当中开发环境2个,生成环境2个。为了标记清楚哪个是开发环境或生成环境,你能够重命名数据库名称:开发环境的aspnet-Dev.sdf 和School-Dev.sdf,生产环境的aspnet-Prod.sdf和School-Prod.sdf。

開始改动School.sdf数据库以便仅仅包括部署到生产环境的数据(后面的章节将重命名为School-Prod.sdf)。

Solution Explorer里。双击Server Explorer上的School.sdf数据库。

 

Server Explorer里,展开School.sdf数据库。然后展开Tables

 

Enrollment上点击右键,选择Show Table Data,然后选择全部数据行,删除。

 

弹出确认删除框的时候。点击Yes

 

相同的步骤能够删除Person表里的数据(仅限于EnrollmentDate列为null而且Discriminator列位“Student”的数据)。

 

Server Explorer里,School.sdf上点击右键选择Close Connection

School.sdf已经能够部署了。

5. 创建Membership数据库

Contoso University程序使用了ASP.NET membership和Form验证来验证和授权用户。

当中有一个页面仅仅能让administrators訪问,查看这个页面,请执行程序。选择Courses选项连接下的Update Credits,程序将跳转到Login页面,由于这个页面仅仅授权给了administrators。

 

使用账户"admin"和password"Pas$w0rd"(当中的0是数字0。而不是字符o)登陆以后。你将能够看到Update Credits页面。

 

第一次部署网站的时候,通常须要排除全部的測试账户。

这里,我们须要部署的数据仅须要一个administrator账户而非其他的用户账户。与其手工删除这些測试账户。不能够创建一个新的membership数据库。而且值包括一个生产环境用到的administrator账户。

这里没有自己主动添加种子值(由于这是为School数据库创建的新库)。假设你想再部署以后继续保持測试数据以便继续开发。那就须要事先备份一下測试数据库。

Solution Explorer里。重命名App_Data 目录下的aspnet.sdf 文件为aspnet-Dev.sdf

(不要复制。不过重命名——一会你会再创建一个新数据库)。

Project菜单,选择ASP.NET Configuration 执行Web Site Administration Tool (WAT)。然后选择Security选项卡。

 

点击Create or Manage Roles然后加入一个Administrator角色。

 

导航到Security选项卡,点击Create User然后加入用户"admin"作为一个administrator。

点击Create User 页面上的Create Userbutton之前,确保你选上了右边的Administrator check box以便将用户设置成Administrator角色。

教程里用到的password是: "Pas$w0rd",你能够输入随意email地址。

 

关闭浏览器。返回Solution Explorer,点击刷新refreshbutton你将看到新建立的aspnet.sdf文件。

 

右键aspnet.sdf文件,选择Include in Project将它包括到项目里。

6. 重命名生产环境数据库

没有必要为生产环境重命名数据库,可是假设这样做了。解决方式将会更加清晰:

重命名aspnet.sdf为aspnet-Prod.sdf

重命名School.sdf为School-Prod.sdf

这样。这两个数据就能够部署了

7. 为开发环境设置连接字符串

当你在Visual Studio里执行程序的时候,肯定不能用-Prod版本号的数据库。而是要用-Dev版本号的数据库,这时候你就须要改动Web.config文件中的数据库连接字符串,使之指向到-Dev版本号的连接地址。

(你还没创建School-dev.sdf文件。没事!

,由于Code First会检查你有没有数据库,假设没有会自己主动帮你创建的,你所须要做的就是填写数据库的名称)。

 

打开Web.config文件。找到connection strings节点:

<configuration>
  <!-- Settings -->
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet.sdf" providerName="System.Data.SqlServerCe.4.0"/>
    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School.sdf" providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>
  <!-- Settings -->
</configuration>

将"aspnet.sdf"改成"aspnet-Dev.sdf"。然后将"School.sdf" 改成"School-Dev.sdf":

<configuration>
  <!-- Settings -->
  <connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=|DataDirectory|aspnet-Dev.sdf" providerName="System.Data.SqlServerCe.4.0"/>
    <add name="SchoolContext" connectionString="Data Source=|DataDirectory|School-Dev.sdf" providerName="System.Data.SqlServerCe.4.0"/>
  </connectionStrings>
  <!-- Settings -->
</configuration>

 

执行程序,然后訪问一个页面(比如:Students页)让它来訪问数据库。它将导致Code First 代码创建一个新数据库School-Dev.sdf。点击Solution Explorer里的Refresh,你能够发现这个数据库。右键该数据库选项Include in project将它包括到该项目。

SQL Server Compact数据库引擎和2个生产环境的数据库都已经准备好能够部署了。下一章内容将知道你怎样自己主动设置Web.config的transformations ,一般为开发、測试、生产环境自己主动设置不同的參数。

(当中就有设置开发和生产环境里都用到的数据库连接字符串)。

原文地址:https://www.cnblogs.com/wzzkaifa/p/6727347.html