微軟ASP.NET站點部署指南(2):部署SQL Server Compact數據庫
2011-11-25 14:47 湯姆大叔 閱讀(5098) 評論(1) 收藏 舉報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文件夾可以看到有amd64和x86子文件夾,選擇這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"和密碼"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 User按鈕之前,確保你選上了右邊的Administrator check box以便將用戶設置成Administrator角色。教程里用到的密碼是: "Pas$w0rd",你可以輸入任意email地址。

關閉瀏覽器,返回Solution Explorer,點擊刷新refresh按鈕你將看到新建立的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 ,一般為開發、測試、生產環境自動設置不同的參數。(其中就有設置開發和生產環境里都用到的數據庫連接字符串)。
8. 更多信息
關于NuGet 的更多信息,請訪問:Manage Project Libraries with NuGet和NuGet Documentation。如果你不想使用NuGet,那你需要了解如何分析NuGet包在安裝的時候都有啥東西(Web.config transformations, PowerShell腳本等等),具體內容請查看: Creating and Publishing a Package和Configuration File and Source Code Transformations。
對于數據庫訪問,Contoso University程序要求下面的軟件必須隨程序一起部署,因為不屬于.NET Framework:SQL Server Compact (數據庫引擎),ASP.NET Universal Providers (啟用ASP.NET membership以使用SQL Server Compact),Entity Framework 4.1 (Code First)
浙公網安備 33010602011771號