次の方法で共有


Visual Studio を使用した web 配置の ASP.NET: データベース更新プログラムの配置

作成者: Tom Dykstra

スタート プロジェクトをダウンロードする

このチュートリアル シリーズでは、Visual Studio 2012 または Visual Studio 2010 を使用して、ASP.NET Web アプリケーションをAzure App Service Web Appsまたはサード パーティのホスティング プロバイダーに展開 (発行) する方法について説明します。 シリーズの詳細については、シリーズ の最初のチュートリアルを参照してください。

概要

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

このチュートリアルでは、まず、Code First Migrationsによって管理されているデータベースを更新する方法を示し、後で dbDacFx プロバイダーを使用してデータベースを更新する方法について説明します。

アラーム: チュートリアルを実行するときにエラー メッセージが表示されたり、何かが機能しない場合は、トラブルシューティング ページを必ずチェックしてください。

Code First Migrationsを使用してデータベース更新プログラムをデプロイする

このセクションでは、 エンティティと Instructor エンティティの基本クラスにPerson生年月日列をStudent追加します。 次に、インストラクター データを表示するページを更新して、新しい列を表示します。 最後に、変更をテスト、ステージング、運用にデプロイします。

アプリケーション データベースのテーブルに列を追加する

  1. 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") }
    };
    
  2. ソリューションをビルドし、[ パッケージ マネージャー コンソール ] ウィンドウを開きます。 ContosoUniversity.DAL が 既定のプロジェクトとして選択されていることを確認します。

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

    add-migration AddBirthDate
    

    このコマンドが完了すると、Visual Studio によって新しい DbMigration クラスを定義するクラス ファイルが開き、 メソッドで Up 新しい列を作成するコードを確認できます。 メソッドは Up 、変更を実装するときに列を作成し、変更を Down ロールバックするときに列を削除します。

    AddBirthDate_migration_code

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

    update-database
    

    Entity Framework によって メソッドが Up 実行され、 メソッドが Seed 実行されます。

[講師] ページに新しい列を表示する

  1. ContosoUniversity プロジェクトで Instructors.aspx を開き、新しいテンプレート フィールドを追加して生年月日を表示します。 採用日とオフィスの割り当ての間に追加します。

    <asp:TemplateField HeaderText="Hire Date" SortExpression="HireDate">
        <ItemTemplate>
            <asp:Label ID="InstructorHireDateLabel" runat="server" Text='<%# Eval("HireDate", "{0:d}") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorHireDateTextBox" runat="server" Text='<%# Bind("HireDate", "{0:d}") %>' Width="7em"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    <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>
    <asp:TemplateField HeaderText="Office Assignment" SortExpression="OfficeAssignment.Location">
        <ItemTemplate>
            <asp:Label ID="InstructorOfficeLabel" runat="server" Text='<%# Eval("OfficeAssignment.Location") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorOfficeTextBox" runat="server"
                Text='<%# Eval("OfficeAssignment.Location") %>' Width="7em"
                OnInit="InstructorOfficeTextBox_Init"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    

    (コードのインデントが同期されなくなっている場合は、Ctrl キーを押しながら K キーを押し、Ctrl キーを押しながら D キーを押すと、ファイルの書式が自動的に変更されます)。

  2. アプリケーションを実行し、[ Instructors ] リンクをクリックします。

    ページが読み込まれると、新しい生年月日フィールドが表示されます。

    [名前]、[採用日]、[生年月日]、[Office の割り当て] を示す [講師] ページのスクリーンショット。

  3. ブラウザーを閉じます。

データベース更新プログラムをデプロイする

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

  2. [ Web One Click Publish]\(Web One Click 発行 \) ツール バーで、[ Test publish profile]\(発行プロファイルのテスト\) をクリックし、[ Publish Web]\(Web の発行\) をクリックします。 (ツール バーが無効になっている場合は、ソリューション エクスプローラーで ContosoUniversity プロジェクトを選択します)。

    Visual Studio によって更新されたアプリケーションがデプロイされ、ブラウザーがホーム ページに開きます。

  3. [Instructors] ページを実行して、更新プログラムが正常にデプロイされたことを確認します。

    アプリケーションがこのページのデータベースにアクセスしようとすると、Code First によってデータベース スキーマが更新され、 メソッドが Seed 実行されます。 ページが表示されると、予期される誕生日列と 日付 が表示されます。

  4. [ Web One Click Publish]\(Web One Click 発行 \) ツール バーで、[ ステージング 発行プロファイル] をクリックし、[ Web の発行] をクリックします。

  5. ステージングの [Instructors ] ページを実行して、更新プログラムが正常にデプロイされたことを確認します。

  6. [ Web One Click Publish]\(Web One Click 発行 \) ツール バーで、[Production publish]\ (運用 発行\) プロファイルをクリックし、[ Publish Web]\(Web の発行\) をクリックします。

  7. 運用環境で Instructors ページを実行して、更新プログラムが正常にデプロイされたことを確認します。

    データベースの変更を含む実際の運用アプリケーションの更新では、前のチュートリアルで説明したように 、通常はapp_offline.htmを使用して、デプロイ中にアプリケーションをオフラインにします。

dbDacFx プロバイダーを使用してデータベース更新プログラムをデプロイする

このセクションでは、メンバーシップ データベースの [ユーザー] テーブルに [コメント] 列を追加し、各ユーザーのコメントを表示および編集できるページを作成します。 次に、変更をテスト、ステージング、運用にデプロイします。

メンバーシップ データベースのテーブルに列を追加する

  1. Visual Studio で、SQL Server オブジェクト エクスプローラーを開きます。

  2. (localdb)\v11.0 を展開し、[データベース] を展開し、aspnet-ContosoUniversity (aspnet-ContosoUniversity-Prod ではない) を展開して、[テーブル] を展開します。

    SQL Server ノードの下に (localdb)\v11.0 が表示されない場合は、SQL Server ノードを右クリックし、[SQL Serverの追加] をクリックします。 [サーバーへの接続] ダイアログ ボックスで、サーバー名として「(localdb)\v11.0」と入力し、[接続] をクリックします。

    aspnet-ContosoUniversity が表示されない場合は、プロジェクトを実行し、管理者の資格情報 (パスワードは devpwd) を使用してログインし、SQL Server オブジェクト エクスプローラー ウィンドウを更新します。

  3. [ユーザー] テーブルを右クリックし、[Designerの表示] をクリックします。

    SSOX ビュー Designer

  4. デザイナーで Comments 列を 追加し、 nvarchar(128) と null 許容にして、[ 更新] をクリックします。

    コメント列の追加

  5. [データベースのプレビュー 更新] ボックスで、[データベースの更新] をクリックします。

    データベース 更新のプレビュー

新しい列を表示および編集するページを作成する

  1. ソリューション エクスプローラーで、ContosoUniversity プロジェクトの [アカウント] フォルダーを右クリックし、[追加] をクリックし、[新しい項目] をクリックします。

  2. マスター ページを使用して新しい Web フォームを作成し、UserInfo.aspx という名前を付けます。 既定の Site.Master ファイルをマスター ページとして受け入れます。

  3. 次のマークアップを MainContentContent 要素 (3 Content つの要素の最後) にコピーします。

    <h2>User Information</h2>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
            SelectCommand="SELECT UserId, UserName, Comments FROM [Users]" 
            UpdateCommand="UPDATE [Users] SET [UserName] = @UserName, [Comments] = @Comments WHERE [UserId] = @UserId">
            <DeleteParameters>
                <asp:Parameter Name="UserId" Type="Object" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="UserId" Type="Object" />
                <asp:Parameter Name="UserName" Type="String" />
                <asp:Parameter Name="Comments" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="UserId" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" />
                <asp:BoundField DataField="Comments" HeaderText="Comments" SortExpression="Comments" />
            </Columns>
        </asp:GridView>
    
  4. UserInfo.aspx ページを右クリックし、[ブラウザーで表示] をクリックします。

  5. 管理者ユーザーの資格情報 (パスワードは devpwd) を使用してログインし、ページが正しく動作することを確認するためのコメントをユーザーに追加します。

    UserName テストとコメント トムのテスト アカウントを表示する UserInfo ページを示すスクリーンショット。

  6. ブラウザーを閉じます。

データベース更新プログラムをデプロイする

dbDacFx プロバイダーを使用してデプロイするには、発行プロファイルで [データベースの 更新 ] オプションを選択するだけで済みます。 ただし、このオプションを使用した場合の初期デプロイでは、実行する追加の SQL スクリプトも構成しました。これらはまだプロファイル内にあり、再度実行されないようにする必要があります。

  1. ContosoUniversity プロジェクトを右クリックし、[発行] をクリックして、 Webの発行ウィザードを開きます。

  2. [ テスト プロファイル] を選択します。

  3. [設定] タブをクリックします。

  4. [ DefaultConnection] の [ データベースの更新] を選択します。

  5. 最初のデプロイに対して実行するように構成した追加のスクリプトを無効にします。

    1. [ データベース更新プログラムの構成] をクリックします。
    2. [データベース 更新の構成] ダイアログ ボックスで、[Grant.sql] と [aspnet-data-dev.sql] の横にある [チェック] ボックスをオフにします。
    3. [閉じる] をクリックします。
  6. [プレビュー] タブをクリックします。

  7. [ データベース] の [ DefaultConnection] の右側にある [ データベースのプレビュー ] リンクをクリックします。

    データベース プレビュー

    プレビュー ウィンドウには、コピー先データベースで実行されるスクリプトが表示され、そのデータベース スキーマがソース データベースのスキーマと一致します。 スクリプトには、新しい列を追加する ALTER TABLE コマンドが含まれています。

  8. [ データベース プレビュー ] ダイアログ ボックスを閉じ、[ 発行] をクリックします。

    Visual Studio によって更新されたアプリケーションがデプロイされ、ブラウザーがホーム ページに開きます。

  9. UserInfo ページ (ホーム ページ URL に Account/UserInfo.aspx を追加) を実行して、更新プログラムが正常にデプロイされたことを確認します。 admindevpwd を入力してログインする必要があります。

    テーブル内のデータは既定ではデプロイされず、実行するようにデータデプロイ スクリプトを構成していないため、開発時に追加したコメントは見つかりません。 ステージングに新しいコメントを追加して、変更がデータベースにデプロイされ、ページが正しく動作することを確認できます。

  10. 同じ手順に従って、ステージングと運用環境にデプロイします。

    余分なスクリプトを無効にすることを忘れないでください。 テスト プロファイルと比較した唯一の違いは、 aspnet-prod-data.sql のみを実行するように構成されているため、ステージング プロファイルと運用プロファイルでは 1 つのスクリプトのみを無効にすることです。

    ステージングと運用の資格情報は、admin と prodpwd です。

    データベースの変更を含む実際の運用アプリケーションの更新では、前のチュートリアルで説明したように、通常は、発行前 にapp_offline.htm をアップロードし、後で削除することで、アプリケーション オフラインにします。

まとめ

これで、Code First Migrations と dbDacFx プロバイダーの両方を使用して、データベースの変更を含むアプリケーション更新プログラムがデプロイされました。

[名前]、[採用日]、[生年月日]、[Office の割り当て] が表示されている [講師] ページを示すスクリーンショット。

UserName テストとコメント トムのテスト アカウントを示す UserInfo ページのスクリーンショット。

次のチュートリアルでは、コマンド ラインを使用してデプロイを実行する方法について説明します。