Azure SQL データベースに接続を追加する
Visual Studio 接続済みサービスを使用すると、Azure SQL Database、ローカル エミュレーター (開発中など)、またはオンプレミスの SQL Server データベースに接続できます。 オンプレミス SQL Server については、データへの接続に関する記事を参照してください。
Visual Studio では、接続済みサービス機能を使用して、次のプロジェクト タイプのいずれかから接続できます。
- ASP.NET Core
- .NET Core (コンソール アプリ、WPF、Windows フォーム、クラス ライブラリを含む)
- .NET Core Worker ロール
- Azure Functions
- .NET Framework コンソール アプリ
- ASP.NET モデル ビュー コントローラー (MVC) (.NET フレームワーク)
- ユニバーサル Windows プラットフォーム アプリ
接続済みサービス機能により、必要なすべての参照と接続コードがプロジェクトに追加され、構成ファイルが適切に変更されます。
前提条件
- Azure ワークロードがインストールされている Visual Studio
- サポートされている種類のうち 1 つのプロジェクト
- Azure アカウント。 Azure アカウントがない場合は、Visual Studio サブスクライバー向けの Azure の特典を有効にするか、無料試用版にサインアップします。
接続済みサービスを使用して Azure SQL Database に接続する
Visual Studio でプロジェクトを開きます。
ソリューション エクスプローラーで [接続済みサービス] ノードを右クリックし、コンテキスト メニューの [追加] を選んで使用できるサービスのメニューを開きます。
[接続済みサービス] ノードが表示されない場合は、[プロジェクト]>[接続済みサービス]>[追加] の順に選択します。
[SQL Server データベース] を選びます。 [依存関係に接続する] ページが表示されます。 いくつかのオプションが表示されます。
- SQL Server Express LocalDB、Visual Studio でインストールされるビルトインの SQL Database オファリング
- コンピューター上のローカル コンテナーである SQL Server データベース
- SQL Server Database、ローカル ネットワーク上のオンプレミス SQL Server
- Azure SQL Database、Azure サービスとして実行している SQL Database 向け
ローカル データベースから始めることで、コストを削減し、早期開発を簡単にできます。 後でこれらの手順を繰り返して他のオプションを選ぶことで、Azure のライブ サービスに移行できます。 Azure で再作成するデータベースをローカルで作成する場合、その時点でデータベースを Azure に移行できます。
Azure サービスに接続する場合は、次のステップに進みます。まだサインインしていない場合は、続行する前に Azure アカウントにサインインします。 Azure アカウントを持っていない場合、無料試用版でサインアップできます。
[Azure SQL Database の構成] 画面で、既存の Azure SQL Database を選択し、 [次へ] を選択します。
新しいコンポーネントを作成する必要がある場合は、次の手順に進みます。 それ以外の場合は、手順 7 に進みます。
Azure SQL データベースを作成するには:
緑色のプラス記号の隣の [新規作成] を選びます。
[Azure SQL Database: 新規作成] 画面で、 [作成] を選択します。
[Azure SQL Database の構成] 画面が表示されたら、新しいデータベースが一覧に表示されます。 一覧の中から新しいデータベースを選択し、 [次へ] を選択します。
接続文字列名を入力するか、既定値を選択し、[追加設定] 選択。
接続文字列をローカル シークレット ファイルに格納するか、Azure Key Vault に格納するかを選択し、[次へ] を選択。
[変更の概要] 画面には、プロセスを完了した場合にプロジェクトに対して行われるすべての変更が表示されます。 変更が問題ない場合は、 [完了] を選択します。
ファイアウォール規則の設定を求めるダイアログが表示されたら、 [はい] を選択します。
ソリューション エクスプローラーで、[接続済みサービス] ノードをダブルクリックして [接続済みサービス] タブを開きます。[サービスの依存関係] セクションに接続が表示されます。
追加した依存関係の横にある 3 つのドットをクリックすると、ウィザードをもう一度開いて接続を変更するための [接続] など、さまざまなオプションが表示されます。 また、ウィンドウの右上にある 3 つのドットをクリックして、ローカルの依存関係の開始や、設定の変更などのオプションを表示することもできます。
マネージド ID (Visual Studio 17.12 以降) を使用している場合は、次のセクションを参照して、Azure SQL データベースにマネージド ID ユーザーを設定します。
Microsoft Entra 認証
Visual Studio 2022 バージョン 17.12 以降では、接続済みサービスの手順では、最も安全な認証方法である Microsoft Entra 認証を使用します。 ただし、Visual Studio では、Azure SQL データベースに Microsoft Entra 管理者ユーザーが自動的に作成されることはありません。 Microsoft Entra 管理者ユーザーがいない場合、接続は正常に認証されません。
Azure Portal、PowerShell、または Azure CLI を使用して、Microsoft Entra 管理者ユーザーを作成できます。 これらの各方法の詳細な手順については、「 Microsoft Entra 管理者ユーザーの設定を参照してください。
接続済みサービス プロセスが完了したら、マネージド ID に対応する SQL ユーザーを作成し、データベースで SQL ステートメントを実行してアクセス許可を設定する必要があります。 Azure Portal で Microsoft Entra 管理者ユーザーとして query エディターにサインインし 次のようなステートメントを実行します。
CREATE USER [<identity-name>] FROM EXTERNAL PROVIDER;
ALTER ROLE db_datareader ADD MEMBER [<identity-name>];
ALTER ROLE db_datawriter ADD MEMBER [<identity-name>];
ALTER ROLE db_ddladmin ADD MEMBER [<identity-name>];
GO
<identity-name>
は、Microsoft Entra ID のマネージド ID の名前です。 ID がシステムによって割り当てられる場合は常に、App Service アプリと同じ名前になります。 デプロイ スロットの場合、システム割り当て ID の名前は、<app-name>/slots/<slot-name>
です。 Microsoft Entra グループのアクセス許可を付与するには、代わりにグループの表示名 (たとえば、 myAzureSQLDBAccessGroup
) を使用します。 Microsoft Entra for Azure SQL の 管理 ID の種類 と 管理 ID に関するページを参照してください。 追加するロールは、ユース ケースによって異なります。 「
コードがSystem.Data.SqlClient
参照している場合、System.Data.SqlClient
は Microsoft Entra 認証をサポートしていないため、Microsoft.Data.SqlClient
にアップグレードする必要があります。 アップグレードするには、 Microsoft.Data.SqlClient NuGet パッケージ参照を追加し、 System.Data.SqlClient
を参照する using ディレクティブを更新して、 Microsoft.Data.SqlClient
名前空間を参照します。 いくつかの動作の変更があります。「 チート シートの報告を参照してください。
Visual Studio でプロジェクトを開きます。
ソリューション エクスプローラーで [接続済みサービス] ノードを右クリックし、コンテキスト メニューの [追加] を選んで使用できるサービスのメニューを開きます。
[接続済みサービス] ノードが表示されない場合は、[プロジェクト]>[接続済みサービス]>[追加] の順に選択します。
[SQL Server データベース] を選びます。 [依存関係に接続する] ページが表示されます。 いくつかのオプションが表示されます。
- SQL Server Express LocalDB、Visual Studio でインストールされるビルトインの SQL Database オファリング
- コンピューター上のローカル コンテナーである SQL Server データベース
- SQL Server Database、ローカル ネットワーク上のオンプレミス SQL Server
- Azure SQL Database、Azure サービスとして実行している SQL Database 向け
ローカル データベースから始めることで、コストを削減し、早期開発を簡単にできます。 後でこれらの手順を繰り返して他のオプションを選ぶことで、Azure のライブ サービスに移行できます。 Azure で再作成するデータベースをローカルで作成する場合、その時点でデータベースを Azure に移行できます。
Azure サービスに接続する場合は、次のステップに進みます。まだサインインしていない場合は、続行する前に Azure アカウントにサインインします。 Azure アカウントを持っていない場合、無料試用版でサインアップできます。
[Azure SQL Database の構成] 画面で、既存の Azure SQL Database を選択し、 [次へ] を選択します。
新しいコンポーネントを作成する必要がある場合は、次の手順に進みます。 それ以外の場合は、手順 7 に進みます。
Azure SQL データベースを作成するには:
緑色のプラス記号の隣の [新規作成] を選びます。
[Azure SQL Database: 新規作成] 画面で、 [作成] を選択します。
[Azure SQL Database の構成] 画面が表示されたら、新しいデータベースが一覧に表示されます。 一覧の中から新しいデータベースを選択し、 [次へ] を選択します。
接続文字列名を入力するか、既定値を選択して、接続文字列をローカル シークレット ファイルに保存するか、Azure Key Vault に格納するかを選択します。
[変更の概要] 画面には、プロセスを完了した場合にプロジェクトに対して行われるすべての変更が表示されます。 変更が問題ない場合は、 [完了] を選択します。
ファイアウォール規則の設定を求めるダイアログが表示されたら、 [はい] を選択します。
ソリューション エクスプローラーで、[接続済みサービス] ノードをダブルクリックして [接続済みサービス] タブを開きます。[サービスの依存関係] セクションに接続が表示されます。
追加した依存関係の横にある 3 つのドットをクリックすると、ウィザードをもう一度開いて接続を変更するための [接続] など、さまざまなオプションが表示されます。 また、ウィンドウの右上にある 3 つのドットをクリックして、ローカルの依存関係の開始や、設定の変更などのオプションを表示することもできます。
接続文字列にアクセスする
「ASP.NET Core での開発におけるアプリ シークレットの安全な保存」に従って、シークレットを安全に格納する方法を理解してください。 特に、シークレット ストアから接続文字列を読み取るには、「Configuration API を使用してシークレットを読み取る」のようにコードを追加できます。 「ASP.NET Core での依存関係の挿入」もご覧ください。
Entity Framework 移行
初期の開発時にはローカル データ ストアを使用すると便利な場合がありますが、クラウドに移動する準備ができたら、Entity Framework Core を使用すると、Visual Studio の Entity Framework 移行に関するサポートを使用して、データベースを移動したり、変更をリモート データ ストアとマージしたりできます。 「移行の概要」を参照してください。
[接続済みサービス] タブで、次のスクリーンショットに示すように、3 つのドットをクリックして移行コマンドを見つけることができます。
ここで、新しい移行を作成したり、移行を直接適用したり、移行を適用する SQL スクリプトを生成したりするコマンドを使用できます。
移行を追加する
データ モデルの変更が採用されると、データベース スキーマを同期させておくために、必要な更新がコードで記述された対応する移行を、Entity Framework Core ツールを使用して追加できます。Entity Framework Core は、現在のモデルを古いモデルのスナップショットと比較して相違点を特定し、移行ソース ファイルを生成します。 このファイルは、通常 Migrations という名前のフォルダー内にあるプロジェクトに追加され、他のソース ファイルと同様に、ご自分のプロジェクトのソース管理で追跡できます。
このオプションを選択すると、移行しようとしているデータベース スキーマを表すコンテキスト クラス名を指定するように求められます。
データベースを更新する
移行が作成されたら、データベースに適用できます。 Entity Framework は、移行コードで指定されている変更を使用して、データベースとスキーマを更新します。 このオプションを選択すると、移行しようとしているデータベース スキーマを表すコンテキスト クラス名を指定するように求められます。
SQL スクリプトを生成する
移行を運用データベースに展開するための推奨される方法は、SQL スクリプトの生成による方法です。 この戦略の利点は次のとおりです。
- SQL スクリプトの正確性を審査することができます。スキーマ変更を運用データベースに適用することは、データ損失を伴う可能性のある危険な操作であるため、このことは重要です。
- 場合によっては、運用データベースの特定のニーズに合わせてスクリプトを調整できます。
- SQL スクリプトは展開テクノロジと組み合わせて使用でき、CI プロセスの一部として生成することもできます。
- SQL スクリプトは DBA に提供でき、個別に管理およびアーカイブすることもできます。
このオプションを使用すると、データベース コンテキスト クラスと、スクリプト ファイルの位置情報を求められます。
SQL Server オブジェクト エクスプローラーで開く
このコマンドを使用すると SQL Server オブジェクト エクスプローラーに移動できるため、テーブルやその他のデータベース エンティティを表示したり、データを直接操作したりできるので便利です。 「オブジェクト エクスプローラー」を参照してください。
次のステップ
Azure SQL Database のクイックスタートを続行できますが、最初から開始するのではなく、初期接続を設定した後から開始できます。 Entity Framework を使用している場合は、Azure SQL Database に接続するコードを追加することから開始できます。 SqlClient
または ADO.NET データ クラスを使用している場合は、Azure SQL Database に接続するコードを追加することから開始できます。
コードは、別の方法を使用して接続文字列を取得するクイックスタートのコードと完全には一致しません。 接続文字列はシークレットであり、「ASP.NET Core での開発におけるアプリ シークレットの安全な保存」で説明されているように安全に格納されます。 特に、シークレット ストアから接続文字列を読み取るには、「Configuration API を使用してシークレットを読み取る」のようにコードを追加できます。
ASP.NET Core プロジェクトでは、接続済みサービスによって作成された接続設定または接続文字列を構成オブジェクトで使用できます。 これには、次の例のように、WebApplicationBuilder
クラスのプロパティ (多くのプロジェクト テンプレートでは builder
) によってアクセスできます。
var connection = builder.Configuration["ConnectionStrings:DatabaseConnection"];
Configuration プロパティに指定する文字列は、接続済みサービスの手順で指定した secrets.json または Azure Key Vault 内のキーと一致する必要があります。 たとえば、Visual Studio 2022 17.12 以降では、接続設定は次のように secrets.json に格納されます。
{
"ConnectionStrings:DatabaseConnection": "Server=tcp:webapplication16dbserver.database.windows.net;Authentication=Active Directory Default;Database=WebApplication16_db;",
}
ASP.NET Core プロジェクトでは、接続済みサービスによって作成された接続設定または接続文字列を構成オブジェクトで使用できます。 これには、次の例のように、WebApplicationBuilder
クラスのプロパティ (多くのプロジェクト テンプレートでは builder
) によってアクセスできます。
var connection = builder.Configuration["ConnectionStrings:ConnectionString1"];