次の方法で共有


Visual Studio または Visual Web Developer を使用したSQL Server Compactを使用した ASP.NET Web アプリケーションのデプロイ: SQL Server への移行 - 10/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 を使用した Web 配置の ASP.NET」を参照してください。

概要

このチュートリアルでは、SQL Server CompactからSQL Serverに移行する方法について説明します。 その理由の 1 つは、ストアド プロシージャ、トリガー、ビュー、レプリケーションなど、SQL Server CompactがサポートしていないSQL Server機能を利用することです。 SQL Server CompactとSQL Serverの違いの詳細については、「deploying SQL Server Compact チュートリアル」を参照してください。

SQL Server Expressと開発の完全なSQL Server

SQL Serverへのアップグレードを決定したら、開発環境とテスト環境でSQL ServerまたはSQL Server Expressを使用できます。 ツールのサポートとデータベース エンジンの機能の違いに加えて、SQL Server Compactと他のバージョンのSQL Serverのプロバイダーの実装には違いがあります。 これらの違いにより、同じコードで異なる結果が生成される可能性があります。 そのため、開発データベースとしてSQL Server Compactを維持する場合は、運用環境への各展開の前に、テスト環境でSQL ServerまたはSQL Server Expressでサイトを徹底的にテストする必要があります。

SQL Server Compactとは異なり、SQL Server Expressは基本的に同じデータベース エンジンであり、完全なSQL Serverと同じ .NET プロバイダーを使用します。 SQL Server Expressを使用してテストすると、SQL Serverと同じ結果を得ることができます。 SQL Serverで使用できるSQL Server Expressで同じデータベース ツールのほとんどを使用できます (特にSQL Server Profiler例外です)、ストアド プロシージャ、ビュー、トリガー、レプリケーションなどのSQL Serverの他の機能をサポートしています。 (ただし、通常は運用 Web サイトで完全なSQL Serverを使用する必要があります。SQL Server Expressは共有ホスティング環境で実行できますが、そのために設計されておらず、多くのホスティング プロバイダーではサポートされていません)。

Visual Studio 2012 を使用している場合は、Visual Studio で既定でインストールされるため、通常は開発環境に対して SQL Server Express LocalDB を選択します。 ただし、LocalDB は IIS では機能しないため、テスト環境では、SQL ServerまたはSQL Server Expressを使用する必要があります。

データベースの組み合わせと個別のデータベースの維持

Contoso University アプリケーションには、メンバーシップ データベース (aspnet.sdf) とアプリケーション データベース (School.sdf) の 2 つのSQL Server Compact データベースがあります。 移行するときは、これらのデータベースを 2 つの個別のデータベースまたは 1 つのデータベースに移行できます。 アプリケーション データベースとメンバーシップ データベースの間のデータベース結合を容易にするために、それらを組み合わせることができます。 ホスティング プランでは、それらを組み合わせる理由が提供される場合もあります。 たとえば、ホスティング プロバイダーは、複数のデータベースに対してより多くの料金を請求する場合や、複数のデータベースを許可しない場合があります。 これは、このチュートリアルで使用される Cytanium Lite ホスティング アカウントの場合で、1 つのSQL Server データベースのみを許可します。

このチュートリアルでは、次のように 2 つのデータベースを移行します。

  • 開発環境の 2 つの LocalDB データベースに移行します。
  • テスト環境の 2 つのSQL Server Express データベースに移行します。
  • 運用環境の 1 つの結合された完全なSQL Server データベースに移行します。

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

SQL Server Expressのインストール

SQL Server Expressは Visual Studio 2010 では既定で自動的にインストールされますが、既定では Visual Studio 2012 ではインストールされません。 SQL Server 2012 Express をインストールするには、次のリンクをクリックします。

[ENU/x64/SQLEXPR_x64_ENU.exe] または [ENU/x86/SQLEXPR_x86_ENU.exe] を選択し、インストール ウィザードで既定の設定をそのまま使用します。 インストール オプションの詳細については、「インストール ウィザードから SQL Server 2012 をインストールする (セットアップ)」を参照してください。

テスト環境用のSQL Server Express データベースの作成

次の手順では、ASP.NET メンバーシップと School データベースを作成します。

[表示] メニューの [サーバー エクスプローラー (Visual Web Developer のデータベース エクスプローラー)] を選択し、[データ Connections] を右クリックし、[新しいSQL Server データベースの作成] を選択します。

Selecting_Create_New_SQL_Server_Database

[新しいSQL Server データベースの作成] ダイアログ ボックスで、[サーバー名] ボックスに「".\SQLExpress」と入力し、[新しいデータベース名] ボックスに「aspnet-Test」と入力し、[OK] をクリックします

Create_New_SQL_Server_Database_aspnet

同じ手順に従って、"School-Test" という名前の新しい SQL Server Express School データベースを作成します。

(これらのデータベース名に "Test" を追加します。これは、後で開発環境用に各データベースの追加インスタンスを作成し、2 つのデータベース セットを区別できる必要があるためです)。

サーバー エクスプローラーに 2 つの新しいデータベースが表示されるようになりました。

New_databases_in_Server_Explorer

新しいデータベースの許可スクリプトの作成

アプリケーションが開発用コンピューター上の IIS で実行されると、アプリケーションは既定のアプリケーション プールの資格情報を使用してデータベースにアクセスします。 ただし、既定では、アプリケーション プール ID にはデータベースを開く権限がありません。 そのため、そのアクセス許可を付与するスクリプトを実行する必要があります。 このセクションでは、後で実行するスクリプトを作成して、アプリケーションが IIS で実行されるときにデータベースを開くことができるようにします。

運用環境への配置に関するチュートリアルで作成したソリューションの SolutionFiles フォルダーで、Grant.sqlという名前の新しい SQL ファイル作成します。 次の SQL コマンドを ファイルにコピーし、ファイルを保存して閉じます。

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [ContosoUniversityUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'ContosoUniversityUser'
GO

注意

このスクリプトは、このチュートリアルで指定されているように、SQL Server 2008 と Windows 7 の IIS 設定で動作するように設計されています。 別のバージョンの SQL Server または Windows を使用している場合、またはコンピューターで IIS を別の方法で設定する場合は、このスクリプトの変更が必要になる場合があります。 SQL Serverスクリプトの詳細については、「オンライン ブックのSQL Server」を参照してください。

注意

セキュリティに関する注意 このスクリプトは、実行時にデータベースにアクセスするユーザーにdb_ownerアクセス許可を付与します。これは、運用環境で使用できます。 一部のシナリオでは、完全なデータベース スキーマの更新アクセス許可を持つユーザーをデプロイにのみ指定し、データの読み取りと書き込み専用のアクセス許可を持つ別のユーザーを実行時に指定することが必要な場合があります。 詳細については、「テスト環境としての IIS への展開」の「Code First Migrationsの自動 Web.config 変更の確認」を参照してください。

テスト環境のデータベース配置の構成

次に、データベースごとに次のタスクを実行するように Visual Studio を構成します。

  • 変換元データベースの構造 (テーブル、列、制約など) を変換先データベースに作成する SQL スクリプトを生成します。
  • ソース データベースのデータを変換先データベースのテーブルに挿入する SQL スクリプトを生成します。
  • 生成されたスクリプトと、作成した Grant スクリプトをコピー先データベースで実行します。

[プロジェクトのプロパティ] ウィンドウを開き、[パッケージ/SQL の発行] タブを選択します。

[構成] ドロップダウン リストで [アクティブ (リリース)] または [リリース] が選択されていることを確認します。

[ このページを有効にする] をクリックします

Package_Publish_SQL_tab_Enable_This_page

[ SQL のパッケージ化/発行 ] タブは、従来のデプロイ方法を指定するため、通常は無効になっています。 ほとんどのシナリオでは、 Web の発行 ウィザードでデータベースの展開を構成する必要があります。 SQL Server CompactからSQL ServerまたはSQL Server Expressへの移行は、この方法が適した特別なケースです。

[ Web.configからインポート] をクリックします。

Selecting_Import_from_Web.config

Visual Studio は、Web.config ファイル内の接続文字列を検索し、メンバーシップ データベース用と School データベース用の接続文字列を検索し、[データベース エントリ] テーブルの各接続文字列に対応する行を追加します。 検索する接続文字列は既存のSQL Server Compact データベース用であり、次の手順では、これらのデータベースをデプロイする方法と場所を構成します。

[データベース エントリ] テーブルの下にある [ データベース エントリの詳細 ] セクションに 、データベース の配置設定を入力します。 [ データベース エントリの詳細 ] セクションに表示される設定は、次の図に示すように、[ データベース エントリ] テーブルで選択されている行に関連します。

Database_Entry_Details_section_of_Package_Publish_SQL_tab

メンバーシップ データベースの展開設定の構成

メンバーシップ データベースに適用される設定を構成するには、データベース エントリ テーブルの DefaultConnection-Deployment 行を選択します。

[接続先データベースの接続文字列] に、新しいSQL Server Express メンバーシップ データベースを指す接続文字列を入力します。 必要な接続文字列は、サーバー エクスプローラーから取得できます。 [サーバー エクスプローラー] で[データ Connections] を展開し、aspnetTest データベースを選択し、[プロパティ] ウィンドウから [接続文字列] の値をコピーします。

aspnet_connection_string_in_Server_Explorer

同じ接続文字列をここで再現します。

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

この接続文字列をコピーし、[SQL のパッケージ化/発行] タブのコピー先データベースの接続文字列に貼り付けます。

[既存のデータベースからデータやスキーマをプルする] が選択されていることを確認します。 これが原因で、SQL スクリプトが自動的に生成され、移行先データベースで実行されます。

ソース データベース値の接続文字列は、Web.config ファイルから抽出され、開発SQL Server Compact データベースを指します。 これは、移行先データベースで後で実行されるスクリプトを生成するために使用されるソース データベースです。 データベースの実稼働バージョンをデプロイする場合は、"aspnet-Dev.sdf" を "aspnet-Prod.sdf" に変更します。

データ (ユーザー アカウントとロール) とデータベース構造をコピーするため、[ データベース スクリプト] オプション を [ スキーマのみ ] から [ スキーマとデータ] に変更します。

先ほど作成した許可スクリプトを実行するようにデプロイを構成するには、それらを [データベース スクリプト ] セクションに追加する必要があります。 [ スクリプトの追加] をクリックし、[ SQL スクリプトの追加 ] ダイアログ ボックスで、許可スクリプトを保存したフォルダー (ソリューション ファイルを含むフォルダー) に移動します。 Grant.sqlという名前 のファイルを選択し、[ 開く] をクリックします。

Select_File_dialog_box_grant_script

データベース エントリDefaultConnection-Deployment 行の設定は、次の図のようになります。

Database_Entry_Details_for_DefaultConnection_Test

School データベースの展開設定の構成

次に、[データベース エントリ] テーブルの [SchoolContext-Deployment] 行を選択して、School データベースの展開設定を構成します。

前に使用したのと同じ方法を使用して、新しいSQL Server Express データベースの接続文字列を取得できます。 [SQL のパッケージ化/発行] タブで、この接続文字列をコピー先データベースの接続文字列にコピーします。

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

[既存のデータベースからデータまたはスキーマをプルする] が選択されていることを確認します。

ソース データベース値の接続文字列は、Web.config ファイルから抽出され、開発SQL Server Compactデータベースを指します。 "School-Dev.sdf" を "School-Prod.sdf" に変更して、データベースの運用バージョンをデプロイします。 (App_Data フォルダーに School-Prod.sdf ファイルを作成したことがないので、そのファイルをテスト環境から ContosoUniversity プロジェクト フォルダーの App_Data フォルダーに後でコピーします)。

[データベース スクリプト オプション] を[スキーマとデータ] に変更します。

また、スクリプトを実行して、このデータベースの読み取りと書き込みのアクセス許可をアプリケーション プール ID に付与するため、メンバーシップ データベースの場合と同様に 、Grant.sql スクリプト ファイルを追加します。

完了すると、[データベース エントリ] の [SchoolContext-Deployment] 行の設定は次の図のようになります。

Database_Entry_Details_for_SchoolContext_Test

[ SQL のパッケージ化/発行 ] タブに変更を保存します。

School-Prod.sdf ファイルを c:\inetpub\wwwroot\ContosoUniversity\App_Data フォルダーから ContosoUniversity プロジェクトのApp_Data フォルダーにコピーします。

許可スクリプトのトランザクション モードの指定

デプロイ プロセスでは、データベース スキーマとデータをデプロイするスクリプトが生成されます。 既定では、これらのスクリプトはトランザクションで実行されます。 ただし、既定では、カスタム スクリプト (許可スクリプトなど) はトランザクションでは実行されません。 デプロイ プロセスでトランザクション モードが混在している場合は、デプロイ中にスクリプトが実行されるときにタイムアウト エラーが発生する可能性があります。 このセクションでは、トランザクションで実行するカスタム スクリプトを構成するためにプロジェクト ファイルを編集します。

ソリューション エクスプローラーで、ContosoUniversity プロジェクトを右クリックし、 [プロジェクトのアンロード] を選択します。

Unload_Project_in_Solution_Explorer

次に、プロジェクトをもう一度右クリックし、[ ContosoUniversity.csproj の編集] を選択します。

Edit_Project_in_Solution_Explorer

Visual Studio エディターには、プロジェクト ファイルの XML コンテンツが表示されます。 いくつかの PropertyGroup 要素があることに注意してください。 (画像では、要素の PropertyGroup 内容は省略されています)。

プロジェクト ファイル エディター ウィンドウ

属性を持たない Condition 最初の属性は、ビルド構成に関係なく適用される設定用です。 1 つの PropertyGroup 要素はデバッグ ビルド構成にのみ適用され (属性に Condition 注意してください)、1 つはリリース ビルド構成にのみ適用され、1 つはテスト ビルド構成にのみ適用されます。 リリース ビルド構成の PropertyGroup 要素内に、[SQL のパッケージ化/発行] タブに入力した設定を含む要素が表示PublishDatabaseSettingsされます。指定したObject各許可スクリプトに対応する 要素があります ("Grant.sql" の 2 つのインスタンスに注目してください)。 既定では、 Transacted 各許可スクリプトの Source 要素の属性は です False

Transacted_false

要素の 属性の値を TransactedSource に変更します True

Transacted_true

プロジェクト ファイルを保存して閉じ、ソリューション エクスプローラーでプロジェクトを右クリックし、[プロジェクトの再読み込み] を選択します。

Reload_project

接続文字列の Web.Config 変換の設定

[SQL の パッケージ化/発行 ] タブで入力した新しい SQL Express データベースの接続文字列は、デプロイ時に移行先データベースを更新するために Web 配置でのみ使用されます。 デプロイされた Web.config ファイル内の接続文字列が新しいSQL Server Express データベースを指すように、Web.config 変換を設定する必要があります。 ([ SQL のパッケージ化/発行 ] タブを使用する場合、発行プロファイルで接続文字列を構成することはできません)。

Web.Test.config 開き、 要素をconnectionStrings次の例の connectionStrings 要素に置き換えます。 (コンテキストを提供するためにここに示されている周囲のコードではなく、connectionStrings 要素のみをコピーしてください)。

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="SchoolContext" 
         connectionString="Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <!-- appSettings element, comments, and system.web element -->
</configuration>

このコードにより、connectionStringデプロイされた Web.config ファイルで各add要素の 属性と providerName 属性が置き換えられます。 これらの接続文字列は、[SQL のパッケージ化/発行] タブに入力した接続文字列と同じではありません。設定 "MultipleActiveResultSets=True" は、Entity Framework とユニバーサル プロバイダーに必要であるため、設定に追加されました。

SQL Server Compactのインストール

SqlServerCompact NuGet パッケージは、Contoso University アプリケーションのSQL Server Compact データベース エンジン アセンブリを提供します。 ただし、SQL Server データベースで実行するスクリプトを作成するために、SQL Server Compact データベースを読み取ることができる必要があるのはアプリケーションではなく Web 配置になりました。 Web 配置でデータベースSQL Server Compact読み取りを有効にするには、Microsoft SQL Server Compact 4.0 SP1 のリンクを使用して、開発用コンピューターにSQL Server Compactをインストールします。

テスト環境へのデプロイ

テスト環境に発行するには、発行プロファイル データベース設定ではなく、データベースの発行に [ パッケージ/発行 SQL ] タブを使用するように構成された発行プロファイルを作成する必要があります。

まず、既存のテスト プロファイルを削除します。

ソリューション エクスプローラーで、ContosoUniversity プロジェクトを右クリックし、[発行] をクリックします。

[ プロファイル ] タブを選択します。

[プロファイルの管理] をクリックします。

[ テスト] を選択し、[ 削除] をクリックし、[ 閉じる] をクリックします。

[Web の発行] ウィザードを閉じて、この変更を保存します。

次に、新しいテスト プロファイルを作成し、それを使用してプロジェクトを発行します。

ソリューション エクスプローラーで、ContosoUniversity プロジェクトを右クリックし、[発行] をクリックします。

[ プロファイル ] タブを選択します。

ドロップダウン リストから [新規...>] を選択<し、プロファイル名として「Test」と入力します。

[ サービス URL ] ボックスに「 localhost」と入力します。

[ サイト/アプリケーション ] ボックスに、「 既定の Web サイト/ContosoUniversity」と入力します。

[ 宛先 URL ] ボックスに「」と入力 http://localhost/ContosoUniversity/します。

[次へ] をクリックします。

[ 設定] タブでは、[ SQL のパッケージ/発行 ] タブが構成されていることが警告され、[新しいデータベースの発行の機能強化を有効にする] をクリックしてオーバーライドする機会が与えられます。 このデプロイでは、[ SQL のパッケージ化/発行 ] タブの設定をオーバーライドしたくないので、[ 次へ] をクリックします。

Publish_Web_wizard_Settings_tab_Migrate

[ プレビュー ] タブのメッセージは、 発行するデータベースが選択されていないことを示しますが、これは、発行プロファイルでデータベースの発行が構成されていないことを意味するだけです。

[発行] をクリックします。

Publish_Web_wizard_Preview_tab_Migrate

Visual Studio によってアプリケーションがデプロイされ、テスト環境のサイトのホーム ページにブラウザーが開きます。 Instructors ページを実行して、前に確認したのと同じデータが表示されることを確認します。 [ 学生の追加] ページを実行し、新しい学生を追加して、[ 学生 ] ページで新しい学生を表示します。 これにより、データベースを更新できることを確認します。 [ クレジットの更新 ] ページ (ログインする必要があります) を選択して、メンバーシップ データベースがデプロイされ、アクセス権があることを確認します。

運用環境用のSQL Server データベースの作成

テスト環境にデプロイしたので、運用環境へのデプロイを設定する準備ができました。 デプロイするデータベースを作成することで、テスト環境の場合と同じように開始します。 概要から思い出したように、Cytanium Lite ホスティング プランでは 1 つのSQL Server データベースのみが許可されるため、2 つではなく 1 つのデータベースのみを設定します。 メンバーシップ データベースと School SQL Server Compact データベースのすべてのテーブルとデータは、運用環境の 1 つのSQL Server データベースにデプロイされます。

の Cytanium コントロール パネルに http://panel.cytanium.com移動します。 [データベース] の上にマウスポインターを合わせると、[SQL Server 2008] をクリックします。

Selecting_Databases_in_Control_Panel

[SQL Server 2008] ページで、[データベースの作成] をクリックします。

Selecting_Create_Database

データベースに「School」という名前を付け、[保存] をクリック します。 (ページにはプレフィックス "contosou" が自動的に追加されるため、有効な名前は "contosouSchool" になります)。

Naming_the_database

同じページで、[ ユーザーの作成] をクリックします。 Cytanium のサーバーでは、統合 Windows セキュリティを使用してアプリケーション プール ID をデータベースを開く代わりに、データベースを開く権限を持つユーザーを作成します。 運用環境の Web.config ファイルに含まれる接続文字列にユーザーの資格情報を追加します。 この手順では、これらの資格情報を作成します。

Creating_a_database_user

[SQL ユーザーのプロパティ] ページで必要なフィールドに入力します。

  • 名前として「ContosoUniversityUser」と入力します。
  • パスワードを入力します。
  • 既定のデータベースとして contosouSchool を選択します。
  • [contosouSchool チェック] ボックスを選択します。

SQL_User_Properties_page

運用環境のデータベース配置の構成

これで、テスト環境で前に行ったように、[ パッケージ/SQL の発行 ] タブでデータベースデプロイ設定を設定する準備ができました。

[プロジェクトのプロパティ] ウィンドウを開き、[パッケージ/SQL の発行] タブを選択し、[構成] ドロップダウン リストで [アクティブ (リリース)] または [リリース] が選択されていることを確認します。

各データベースの展開設定を構成する場合、運用環境とテスト環境で行う操作の主な違いは、接続文字列の構成方法にあります。 テスト環境では、異なる宛先データベース接続文字列を入力しましたが、運用環境では、移行先の接続文字列は両方のデータベースで同じになります。 これは、両方のデータベースを運用環境の 1 つのデータベースにデプロイしているためです。

メンバーシップ データベースの展開設定の構成

メンバーシップ データベースに適用される設定を構成するには、[データベース エントリ] テーブルの [DefaultConnection-Deployment] 行を選択します。

[接続先データベースの接続文字列] に、先ほど作成した新しい運用SQL Server データベースを指す接続文字列を入力します。 ウェルカム メールから接続文字列を取得できます。 電子メールの関連部分には、次のサンプル 接続文字列が含まれています。

Data Source=vserver01.cytanium.com;Initial Catalog={myDataBase};User Id={myUsername};Password={myPassword};

3 つの変数を置き換えた後、必要な接続文字列は次の例のようになります。

Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;

この接続文字列をコピーし、[SQL のパッケージ化/発行] タブのコピー先データベースの接続文字列に貼り付けます。

[既存のデータベースからデータやスキーマをプルする] がまだ選択されていること、および [データベース スクリプト] オプションが [スキーマ] と [データ] になっていることを確認します。

[データベース スクリプト] ボックスで、Grant.sql スクリプトの横にある [チェック] ボックスをオフにします。

Disable_Grant_script

School データベースの展開設定の構成

次に、[データベース エントリ] テーブルの [SchoolContext-Deployment] 行を選択して、School データベース設定を構成します。

メンバーシップ データベースのそのフィールドにコピーしたコピー先データベースの接続文字列に、同じ接続文字列をコピーします。

[既存のデータベースからデータやスキーマをプルする] がまだ選択されていること、および [データベース スクリプト] オプションが [スキーマ] と [データ] になっていることを確認します。

[データベース スクリプト] ボックスで、Grant.sql スクリプトの横にある [チェック] ボックスをオフにします。

[ パッケージ/SQL の発行 ] タブに変更を保存します。

実稼働データベースへの接続文字列の Web.Config 変換の設定

次に、デプロイされた Web.config ファイル内の接続文字列が新しい運用データベースを指すように 、Web.config 変換を設定します。 Web 配置で使用する [パッケージ/発行 SQL] タブに入力した接続文字列は、オプションの追加MultipleResultSetsを除き、アプリケーションで使用する必要があるのと同じです。

Web.Production.config を開き、 要素をconnectionStrings次のconnectionStrings例のような要素に置き換えます。 (コンテキストを connectionStrings 表示するために提供される周囲のタグではなく、 要素のみをコピーします)。

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="SchoolContext" 
         connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <!-- appSettings element, comments, and system.web element -->
</configuration>

Web.config ファイル内の接続文字列を常に暗号化するように指示するアドバイスが表示されることがあります。 これは、自分の会社のネットワーク上のサーバーに展開する場合に適している可能性があります。 ただし、共有ホスティング環境にデプロイする場合は、ホスティング プロバイダーのセキュリティプラクティスを信頼しており、接続文字列を暗号化する必要も実用的でもない。

運用環境へのデプロイ

これで、運用環境にデプロイする準備ができました。 Web 配置では、プロジェクトの App_Data フォルダー内のSQL Server Compact データベースが読み取られ、そのテーブルとデータがすべて実稼働SQL Server データベースに再作成されます。 [ Web のパッケージ化/発行 ] タブ設定を使用して発行するには、運用環境用の新しい発行プロファイルを作成する必要があります。

まず、前にテスト プロファイルを実行した場合と同様に、既存の運用プロファイルを削除します。

ソリューション エクスプローラーで、ContosoUniversity プロジェクトを右クリックし、[発行] をクリックします。

[ プロファイル ] タブを選択します。

[プロファイルの管理] をクリックします。

[ 運用] を選択し、[ 削除] をクリックし、[ 閉じる] をクリックします。

[Web の発行] ウィザードを閉じて、この変更を保存します。

次に、新しい運用プロファイルを作成し、それを使用してプロジェクトを発行します。

ソリューション エクスプローラーで、ContosoUniversity プロジェクトを右クリックし、[発行] をクリックします。

[ プロファイル ] タブを選択します。

[ インポート] をクリックし、前にダウンロードした .publishsettings ファイルを選択します。

[ 接続 ] タブで、[ 宛先 URL] を 正しい一時 URL (この例では ) http://contosouniversity.com.vserver01.cytanium.comに変更します。

プロファイルの名前を Production に変更します。 ([ プロファイル ] タブを選択し、[ プロファイルの管理 ] をクリックしてこれを行います)。

[Web の発行] ウィザードを閉じて、変更を保存します。

運用環境でデータベースが更新されていた実際のアプリケーションでは、発行する前に 2 つの追加の手順を実行します。

  1. 「運用環境へのデプロイ」チュートリアルに示すように、app_offline.htmアップロードします。
  2. Cytanium コントロール パネルの ファイル マネージャー 機能を使用して、 aspnet-Prod.sdf ファイルと School-Prod.sdf ファイルを運用サイトから ContosoUniversity プロジェクトの App_Data フォルダーにコピーします。 これにより、新しいSQL Server データベースにデプロイするデータに、運用 Web サイトによって行われた最新の更新プログラムが確実に含まれます。

[Web One Click Publish]\(Web One Click 発行\) ツール バーで、Production プロファイルが選択されていることを確認し、[発行] をクリックします。

発行前 にapp_offline.htm をアップロードした場合は、Cytanium コントロール パネルの ファイル マネージャー ユーティリティを使用して 、app_offlineを削除する必要があります。テストする前に htm。 同時に、App_Data フォルダーから .sdf ファイルを削除することもできます。

ブラウザーを開き、パブリック サイトの URL に移動して、テスト環境に展開した後と同じ方法でアプリケーションをテストできるようになりました。

開発中のSQL Server Express LocalDB への切り替え

概要で説明したように、一般に、テストと運用環境で使用するのと同じデータベース エンジンを開発で使用することをお勧めします。 (開発中にSQL Server Expressを使用する利点は、データベースが開発、テスト、および運用環境で同じように動作する点に注意してください)。このセクションでは、Visual Studio からアプリケーションを実行するときにSQL Server Express LocalDB を使用するように ContosoUniversity プロジェクトを設定します。

この移行を実行する最も簡単な方法は、Code First とメンバーシップ システムで両方の新しい開発データベースを作成できるようにすることです。 この方法を使用して移行するには、次の 3 つの手順が必要です。

  1. 新しい SQL Express LocalDB データベースを指定するように接続文字列を変更します。
  2. Web サイト管理ツールを実行して、管理者ユーザーを作成します。 これにより、メンバーシップ データベースが作成されます。
  3. Code First Migrations update-database コマンドを使用して、アプリケーション データベースを作成してシード処理します。

Web.config ファイル内の接続文字列の更新

Web.config ファイルを開き、 要素をconnectionStrings次のコードに置き換えます。

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-Dev.mdf;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
  <add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\School-Dev.mdf;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

メンバーシップ データベースの作成

ソリューション エクスプローラーで、ContosoUniversity プロジェクトを選択し、[プロジェクト] メニューの [ASP.NET 構成] をクリックします。

[セキュリティ] タブを選択します。

[ ロールの作成または管理] をクリックし、 管理者 ロールを作成します。

[セキュリティ] タブに戻ります。

[ユーザーの作成] をクリックし、[管理者チェック] ボックスを選択し、admin という名前のユーザーを作成します。

Web サイト管理ツールを閉じます。

School データベースの作成

[パッケージ マネージャー コンソール] ウィンドウを開きます。

[ 既定のプロジェクト ] ドロップダウン リストで、ContosoUniversity.DAL プロジェクトを選択します。

次のコマンドを入力します。

update-database

Code First Migrationsデータベースを作成する初期移行を適用し、AddBirthDate 移行を適用した後、Seed メソッドを実行します。

Control キーを押しながら F5 キーを押してサイトを実行します。 テスト環境と運用環境で行ったように、[ 学生の追加] ページを実行し、新しい学生を追加して、[ 学生 ] ページで新しい学生を表示します。 これにより、School データベースが作成および初期化され、それに対する読み取りと書き込みのアクセス権があることを確認します。

[ クレジットの更新 ] ページを選択し、ログインして、メンバーシップ データベースがデプロイされ、それにアクセスしていることを確認します。 ユーザー アカウントを移行しなかった場合は、管理者アカウントを作成し、[ クレジットの更新 ] ページを選択して動作することを確認します。

SQL Server Compactファイルのクリーンアップ

SQL Server Compactをサポートするために含まれていたファイルと NuGet パッケージは不要になります。 必要に応じて (この手順は必要ありません)、不要なファイルと参照をクリーンできます。

ソリューション エクスプローラーで、App_Data フォルダーから .sdf ファイルを削除し、bin フォルダーから amd64 フォルダーと x86 フォルダーを削除します。

ソリューション エクスプローラーで、(プロジェクトの 1 つではなく) ソリューションを右クリックし、[ソリューションの NuGet パッケージの管理] をクリックします。

[ NuGet パッケージの管理 ] ダイアログ ボックスの左側のウィンドウで、[ インストール済みパッケージ] を選択します。

EntityFramework.SqlServerCompact パッケージを選択し、[管理] をクリックします。

[ プロジェクトの選択 ] ダイアログ ボックスで、両方のプロジェクトが選択されています。 両方のプロジェクトでパッケージをアンインストールするには、両方のチェック ボックスをオフにして、[OK] をクリックします。

依存パッケージもアンインストールするかどうかを確認するダイアログ ボックスで、[いいえ] をクリックします。 そのうちの 1 つは、保持する必要がある Entity Framework パッケージです。

同じ手順に従って 、SqlServerCompact パッケージをアンインストールします。 ( EntityFramework.SqlServerCompact パッケージは SqlServerCompact パッケージに依存するため、この順序でパッケージをアンインストールする必要があります)。

これで、SQL Server Expressと完全なSQL Serverに正常に移行されました。 次のチュートリアルでは、別のデータベース変更を行い、テスト データベースと運用データベースでSQL Server Expressと完全なSQL Serverを使用する場合にデータベースの変更をデプロイする方法について説明します。