Visual Studio または Visual Web Developer を使用した 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 Compact 以外の SQL Server エディションの配置方法、Windows Azure Web サイトへの配置方法などを解説したチュートリアルは、「Visual Studio を使用した ASP.NET の Web 配置」をご覧ください。

概要

このチュートリアルでは、データベース更新プログラムを完全な SQL Server データベースに配置する方法について説明します。 Code First Migrations によりデータベース更新プログラムのすべての作業が行われるため、このプロセスは、データベース更新プログラムの配置に関するチュートリアルの SQL Server Compact 向けの内容とほぼ同じです。

リマインダー: チュートリアルの間、エラー メッセージが表示されたり、うまくいかないことがある場合は、必ずトラブルシューティングに関するページを確認してください。

新しい列のテーブルへの追加

チュートリアルのこのセクションでは、データベースの変更と対応するコードの変更を行い、テストおよび運用環境に配置する準備として Visual Studio でテストします。 この変更には、Instructor エンティティに OfficeHours カラムを追加し、Instructors ウェブ ページでの新しい情報の表示が含まれます。

ContosoUniversity.DAL プロジェクトで、Instructor.cs を開き、HireDateCourses プロパティの間に次のプロパティを追加します。

[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 Migrations を使用する場合、データベースの変更を SQL Server に配置する方法は、SQL Server Compact の場合と同じです。 ただし、テスト発行プロファイルは、引き続き SQL Server Compact から SQL Server に移行するように設定されているため、これを変更する必要があります。

最初の手順は、前のチュートリアルで作成した接続文字列変換を削除します。 これらはもう必要ありません。SQL Server への移行用に [SQL のパッケージ/発行] タブを構成する前と同様に、発行プロファイルで接続文字列変換を指定するためです。

Web.Test.config ファイルを開き、connectionStrings 要素を削除します。 Web.Test.config ファイルに残っている唯一の変換は、appSettings 要素の Environment 値の変換です。

これで、発行プロファイルを更新し、テスト環境に発行できるようになりました。

Web の公開ウィザードを開き、[プロファイル] タブに切り替えます。

テスト発行プロファイルを選択します。

[Settings](設定) タブを選択します。

[新しいデータベース公開機能の向上を有効にする] を選択します。

SchoolContextの接続文字列ボックスに、前のチュートリアルの Web.Test.config 変換ファイルで使用したのと同じ値を入力します。

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

[Code First Migrations の実行 (アプリケーションの起動時に実行)] を選択します。 (Visual Studio のバージョンでは、このチェック ボックスに Code First Migrations の適用というラベルが付いている場合があります)。

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 Migrations で、データベースが最新かどうかがチェックされ、最新の移行がまだ適用されていないことが検出されます。 Code First Migrations により、最新の移行が適用され、Seed メソッドが実行され、ページが正常に実行されます。 シードされたデータを含む新しい [勤務時間] 列が表示されます。

Instructors_page_with_OfficeHours_Test

データベース更新プログラムの運用環境への配置

運用環境の発行プロファイルも変更する必要があります。 この場合は、既存のプロファイルを削除し、更新された .publishsettings ファイルをインポートして新しく作成します。 更新されたファイルには、Cytanium の SQL Server データベースの接続文字列が含まれます。

テスト環境にデプロイしたときに確認したように、Web.Production.config 変換ファイル内の接続文字列変換はもう必要ありません。 そのファイルを開き、connectionStrings 要素を削除します。 残りの変換は、appSettings 要素の Environment 値と、Elmah エラー レポートへのアクセスを制限する location 要素に対するものです。

運用環境用の新しい発行プロファイルを作成する前に、更新された .publishsettings ファイルを、運用環境への配置のチュートリアルで行ったのと同じ方法でダウンロードします。 (Cytanium のコントロール パネルで、[Web Sites] を選択し、次に contosouniversity.com Web サイトを選択します。[Web Publishing] タブを選択し、[Download Publishing Profile for this web site] を選択します)。これは、.publishsettings ファイル内のデータベース接続文字列を取得するために行います。 ファイルを初めてダウンロードした時は、引き続き SQL Server Compact を使用していて、まだ Cytanium で SQL Server データベースを作成していなかったため、接続文字列を使用できませんでした。

これで、発行プロファイルを更新し、運用環境に発行できるようになりました。

Web の公開ウィザードを開き、[プロファイル] タブに切り替えます。

[プロファイルの管理] をクリックし、運用プロファイルを削除します。

Web の公開ウィザードを閉じ、この変更を保存します。

Webの公開ウィザードをもう一度開き、[インポート] をクリックします。

[接続] タブで、一時 URL を使用している場合は、宛先 URL を適切な値に変更します。

次へ をクリックします。

[設定] タブで、[新しいデータベース公開機能の向上を有効にする] を選択します。

SchoolContextの接続文字列ドロップダウン リストで、Cytanium の接続文字列を選択します。

Selecting_Cytanium_connection_string

[Code First Migrations の実行 (アプリケーションの起動時に実行)] を選択します。

DefaultConnection の接続文字列 ドロップダウン リストで、Cytanium の接続文字列を選択します。

[プロファイル] タブを選択し、[プロファイルの管理] を選択して、プロファイルの名前を "contosouniversity.com - Web 配置" から "運用" に変更します。

発行プロファイルを閉じて変更を保存し、もう一度開きます。

[発行] をクリックします。 (実際の運用 Web サイトの場合は、app_offline.htm を運用環境にコピーし、発行する前にプロジェクト フォルダーに配置してから、配置が完了したら削除します)。

Visual Studio により、コードの変更がテスト環境に配置され、ブラウザーで Contoso University のホーム ページが開かれます。

[Instructors] ページを選択します。

Code First Migrations は、テスト環境と同じようにデータベースを更新します。 シードされたデータを含む新しい [勤務時間] 列が表示されます。

Instructors_page_with_OfficeHours_Prod

これで、SQL Server データベースを使用して、データベースの変更を含むアプリケーション更新プログラムが正常に配置されました。

その他の情報

これで、サードパーティのホスティング プロバイダーに ASP.NET Web アプリケーションを配置する方法に関するこの一連のチュートリアルが完了しました。 これらのチュートリアルで取り上げるトピックの詳細については、MSDN Web サイトの ASP.NET 配置コンテンツ マップをご覧ください。

確認

このチュートリアル シリーズのコンテンツに多大な貢献を果たした次の方々に感謝を捧げます。