使用 Visual Studio 或 Visual Web 開發人員部署具有 SQL Server Compact 的 ASP.NET Web 應用程式:部署 SQL Server 資料庫更新 - 11/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 SQL Server Compact 以外的版本,並示範如何部署至 Windows Azure 網站,請參閱使用 Visual Studio ASP.NET Web 部署

概觀

本教學課程說明如何將資料庫更新部署到完整 SQL Server 資料庫。 因為 Code First 移轉 會執行更新資料庫的所有工作,所以此程式幾乎與您在部署資料庫更新教學課程中針對 SQL Server Compact 所做的作業完全相同。

提醒:如果您在進行教學課程時收到錯誤訊息或某些內容無法運作,請務必檢查 疑難解答頁面

將新數據行加入至數據表

在本教學課程的本節中,您將進行資料庫變更和對應的程式代碼變更,然後在 Visual Studio 中測試它們,以準備將它們部署到測試和生產環境。 變更牽涉到將數據 OfficeHours 行新增至 Instructor 實體,並在 Instructors 網頁中顯示新資訊。

在 ContosoUniversity.DAL 專案中,開啟 Instructor.cs,並在 和 Courses 屬性之間HireDate新增下列屬性:

[MaxLength(50)]
public string OfficeHours { get; set; }

更新初始化表達式類別,使其植入含有測試數據的新數據行。 開啟 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"), OfficeHours = "8-9AM, 4-5PM", 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"), OfficeHours = "6AM-6PM", 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"), OfficeHours = "By appointment only" }
};

在 ContosoUniversity 專案中,開啟 Instructors.aspx,並在第一GridView個控件的結尾</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>

建置方案。

開啟 [ 套件管理員控制台] 視窗,然後選取 [ContosoUniversity.DAL] 作為 [預設] 專案

輸入下列命令:

add-migration AddOfficeHoursColumn

update-database

執行應用程式,然後選取 Instructors 頁面。 頁面的載入時間比平常長一點,因為 Entity Framework 會重新建立資料庫並植入測試數據。

Instructors_page_with_office_hours

將資料庫更新部署至測試環境

當您使用 Code First 移轉 時,將資料庫變更部署至 SQL Server 的方法與 SQL Server Compact 相同。 不過,您必須變更測試發行配置檔,因為它仍設定為從 SQL Server Compact 移轉至 SQL Server。

第一個步驟是移除您在上一個教學課程中建立的 連接字串 轉換。 因為您會在發行配置檔中指定 連接字串 轉換,所以不再需要這些轉換,如同您在設定移轉至 SQL Server 之前設定 [封裝/發佈 SQL] 索引標籤之前所做的一樣。

開啟 Web.Test.config檔案, 並移除 connectionStrings 元素。 Web.Test.config 檔案中唯一剩餘的轉換是 針對 Environment 元素中的appSettings值。

現在您可以更新發行配置檔併發佈至測試環境。

開啟 [ 發佈 Web 精靈],然後切換至 [ 配置檔] 索引 標籤。

選取 [測試 發佈配置檔]。

選取 [Settings] \(設定\) 索引標籤。

按兩下 [啟用新的資料庫發佈改進]。

SchoolContext 的 [連接字串] 方塊中,輸入您在上一個教學課程中 Web.Test.config 轉換檔案中使用的相同值:

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

選取 [在應用程式啟動時執行 Code First 移轉 (執行) ]。 (在 Visual Studio 版本中,複選框可能會標示為 [套用 Code First 移轉.)

DefaultConnection 的 [連接字串] 方塊中,輸入您在上一個教學課程中 Web.Test.config 轉換檔案中使用的相同值:

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

[更新資料庫 ] 保持清除。

按一下 [發佈]。

Visual Studio 會將程式代碼變更部署到測試環境,並將瀏覽器開啟至 Contoso University 首頁。

選取 Instructors 頁面。

當應用程式執行此頁面時,它會嘗試存取資料庫。 Code First 移轉 檢查資料庫是否為最新狀態,並發現尚未套用最新的移轉。 Code First 移轉 套用最新的移轉、執行 Seed 方法,然後頁面正常執行。 您會看到含有植入數據的新 Office Hours 數據行。

Instructors_page_with_OfficeHours_Test

將資料庫更新部署至生產環境

您也必須變更生產環境的發行配置檔。 在此情況下,您將移除現有的配置檔,並匯入更新的 .publishsettings 檔案來建立新的配置檔。 更新的檔案將會在 Cytanium 包含 SQL Server 資料庫的 連接字串。

當您部署至測試環境時,不再需要 連接字串 轉換檔案 Web.Production.config 中的轉換。 開啟該檔案並移除 connectionStrings 專案。 其餘的轉換適用於 Environment 元素中的 appSettings 值,以及 location 限制存取 Elmah 錯誤報告的 元素。

在您為生產環境建立新的發行配置檔之前,請先下載更新的 .publishsettings 檔案,就像您稍早在 部署至生產環境 教學課程中所做的一樣。 (在 Cytanium 控制面板中,按兩下 [網站],然後按兩下 contosouniversity.com 網站。選取 [Web 發佈] 索引標籤,然後按下此網站的 [下載發行配置檔]。) 執行此動作的原因是在 .publishsettings 檔案中挑選資料庫 連接字串。 您第一次下載檔案時無法使用 連接字串,因為您仍在使用 SQL Server Compact,而且尚未在 Cytanium 建立 SQL Server 資料庫。

現在您可以更新發行配置檔併發佈至生產環境。

開啟 [ 發佈 Web 精靈],然後切換至 [ 配置檔] 索引 標籤。

按兩下 [管理設定檔],然後刪除生產配置檔。

關閉 [ 發佈 Web 精靈] 以儲存這項變更。

再次開啟 [發佈 Web 精靈],然後按兩下 [ 匯入]。

如果您使用暫存 URL,請在 [ 連線 ] 索引卷標上,將 [目的地 URL ] 變更為適當的值。

按一下 [下一步]。

在 [ 設定] 索引標籤上,按兩下 [啟用新的資料庫發佈改進]。

SchoolContext 的 [連接字串] 下拉式清單中,選取 Cytanium 連接字串。

Selecting_Cytanium_connection_string

選取 [ 執行程式代碼優先] 移轉, (應用程式啟動時執行)

DefaultConnection 的 [連接字串] 下拉式清單中,選取 Cytanium 連接字串。

選取 [ 配置檔] 索引 標籤,按兩下 [ 管理配置檔],然後將配置檔從 [contosouniversity.com - Web Deploy] 重新命名為 [生產]。

關閉發佈配置檔以儲存變更,然後再次開啟它。

按一下 [發佈]。 (針對實際生產網站,您會將 app_offline.htm 複製到生產環境,並在發佈之前將它放入您的專案資料夾中,然後在部署完成時將其移除。)

Visual Studio 會將程式代碼變更部署到測試環境,並將瀏覽器開啟至 Contoso University 首頁。

選取 Instructors 頁面。

Code First 移轉 以在測試環境中所做的相同方式更新資料庫。 您會看到含有植入數據的新 Office Hours 數據行。

Instructors_page_with_OfficeHours_Prod

您現在已使用 SQL Server 資料庫成功部署包含資料庫變更的應用程式更新。

相關資訊

這一系列教學課程會完成將 ASP.NET Web 應用程式部署至第三方裝載提供者的教學課程。 如需這些教學課程所涵蓋之任何主題的詳細資訊,請參閱 MSDN 網站上的 ASP.NET 部署內容對應

通知

我想要感謝下列對本教學課程系列內容做出重大貢獻的人員: