Visual Studio または Visual Web Developer を使用した SQL Server Compact との ASP.NET Web アプリケーションのデプロイ: データベースの更新のデプロイ - 9/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 App Service Web Apps へのデプロイ方法などを解説したチュートリアルは、「Visual Studio を使った ASP.NET の Web 配置」をご覧ください。

概要

このチュートリアルでは、データベース変更と、関連するコード変更を加え、それらの変更内容を Visual Studio でテストしてから、その更新をテスト、ステージング、運用環境にデプロイします。

リマインダー: チュートリアルを進めていて、エラー メッセージが表示される場合や、うまくいかない場合は、必ずトラブルシューティングのページをご確認ください。

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

この項では、Student (生徒) および Instructor (講師) エンティティの Person ルート クラスに生年月日の列を追加します。 次に、講師データを表示するページを更新して、その新しい列が表示されるようにします。

ContosoUniversity.DAL プロジェクトで、Person.cs を開き、Person クラスの最後に次のプロパティを追加します (その後に 2 つの右中かっこが必要です):

[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
[Display(Name = "Birth Date")]
public DateTime? BirthDate { get; set; }

次は、新しい列に値を提供するように、Seed メソッドを更新します。 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"), 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"), 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") }
};

ContosoUniversity プロジェクトで、Instructors.aspx を開き、生年月日を表示する新しいテンプレート フィールドを追加します。 それを [Hire Date] (雇用日) と [Office Assignment] (オフィス割り当て) のフィールドの間に追加します:

<asp:TemplateField HeaderText="Birth Date" SortExpression="BirthDate">
    <ItemTemplate>
        <asp:Label ID="InstructorBirthDateLabel" runat="server" Text='<%# Eval("BirthDate", "{0:d}") %>'></asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
        <asp:TextBox ID="InstructorBirthDateTextBox" runat="server" Text='<%# Bind("BirthDate", "{0:d}") %>'
            Width="7em"></asp:TextBox>
    </EditItemTemplate>
</asp:TemplateField>

(コードのインデントが最新の状態でない場合は、Ctrl キーを押しながら K キーを押した後に、Ctrl キーを押しながら D キーを押すと、自動的にファイルの書式が設定し直されます。)

ソリューションをビルドしてから、[パッケージ マネージャー コンソール] ウィンドウを開きます。 ContosoUniversity.DAL がまだ [既定のプロジェクト] として選択されていることを確認してください。

[パッケージ マネージャー コンソール] ウィンドウで、[既定のプロジェクト] として [ContosoUniversity.DAL] を選択してから、次のコマンドを入力します:

add-migration AddBirthDate

このコマンドが完了すると、Visual Studio で、新しい DbMigration クラスを定義するクラス ファイルが開かれます。Up メソッド内で、新しい列を作成するコードを確認できます。

AddBirthDate_migration_code

ソリューションをビルドしてから、[パッケージ マネージャー コンソール] ウィンドウで次のコマンドを入力します (ContosoUniversity.DAL プロジェクトがまだ選択されていることを確認してください):

update-database

コマンドが完了したら、アプリケーションを実行し、Instructors ページを選択します。 ページが読み込まれると、新しい [Birth Date] (生年月日) フィールドが表示されます。

Instructors_page_with_birth_date

データベース更新のテスト環境へのデプロイ

ソリューション エクスプローラーで、ContosoUniversity プロジェクトを選択します。

[Web の 1 クリック公開] ツール バーで、[テスト] 発行プロファイルを選択してから、[Web を公開] をクリックします。 (ツール バーが無効になっている場合は、ソリューション エクスプローラーで ContosoUniversity プロジェクトを選択します。)

更新されたアプリケーションが Visual Studio でデプロイされ、ブラウザーでホーム ページが開かれます。 Instructors ページを実行して、更新が正常にデプロイされたことを確認します。 アプリケーションでこのページに関してデータベースにアクセスが試みられると、Code First でデータベース スキーマが更新され、Seed メソッドが実行されます。 ページが表示されると、想定されていた [Birth Date] (生年月日) 列が表示されており、それに日付が含まれています。

Instructors_page_with_birth_date_Test

データベース更新の運用環境へのデプロイ

これで、運用環境にデプロイできるようになりました。 ここでの唯一の違いは、app_offline.htm を使用してユーザーがサイトにアクセスするのを防ぎ、そうすることで、変更のデプロイ中にデータベースを更新することです。 運用環境のデプロイでは、次の手順を実行します。

  • app_offline.htm ファイルを運用サイトにアップロードします。
  • Visual Studio で、[Web の 1 クリック公開] ツール バーの運用プロファイルを選択し、[Web を公開] をクリックします。
  • 運用サイトから app_offline.htm ファイルを削除します。

Note

アプリケーションが運用環境で使用されている間は、バックアップ プランを実装する必要があります。 つまり、School-Prod.sdf ファイルと aspnet-Prod.sdf ファイルを運用サイトからセキュリティで保護されたストレージの場所に定期的にコピーする必要があり、このようなバックアップの世代を数世代分保持する必要があります。 データベースを更新するときは、変更の直前にバックアップ コピーを作成する必要があります。 このようにすれば、間違いを犯し、運用環境にデプロイするまで気付かなかった場合でも、データベースが破損する前の状態にデータベースを復旧できます。

Visual Studio がブラウザーでホーム ページの URL を開くと、app_offline.htm ページが表示されます。 app_offline.htm ファイルを削除したら、ホーム ページをもう一度参照して、更新が正常にデプロイされたことを確認できます。

Instructors_page_with_birth_date_Prod

これで、テストと運用の両方の環境にデータベースの変更を含むアプリケーションの更新がデプロイされました。 次のチュートリアルでは、データベースを SQL Server Compact から SQL Server Express および SQL Server に移行する方法について説明します。