Visual Studio 接続済みサービスを使用すると、Azure SQL Database、ローカル エミュレーター (開発中など)、またはオンプレミスの SQL Server データベースに接続できます。 オンプレミスの SQL Server については、「 データベースへの接続」を参照してください。
Visual Studio では、 接続済みサービス 機能を使用して、次のいずれかの種類のプロジェクトから接続できます。
- ASP.NET Core
- .NET Core (コンソール アプリ、WPF、Windows フォーム、クラス ライブラリを含む)
- .NET Core ワーカー ロール
- Azure Functions
- .NET Framework コンソール アプリ
- ASP.NET モデル-ビュー-コントローラー (MVC) (.NET Framework)
- ユニバーサル Windows プラットフォーム アプリ
接続されたサービス機能により、必要なすべての参照と接続コードがプロジェクトに追加され、構成ファイルが適切に変更されます。
[前提条件]
- Azure ワークロードがインストールされている Visual Studio。
- サポートされている種類の 1 つのプロジェクト
- Azure アカウント。 Azure アカウントがない場合は、Visual Studio サブスクライバー向けの Azure の特典を有効にするか、無料試用版にサインアップします。
接続済みサービスを使用して Azure SQL Database に接続する
Visual Studio でプロジェクトを開きます。
ソリューション エクスプローラーで、[接続済みサービス] ノードを右クリックし、コンテキスト メニューから [追加] を選択して、使用可能なサービスのメニューを開きます。
[ 接続済みサービス ] ノードが表示されない場合は、 Project>Connected Services>Add を選択します。
[SQL Server データベース] を選択します。 [ 依存関係への接続] ページが表示されます。 いくつかのオプションが表示されます。
- Visual Studio と共にインストールされる組み込みの SQL データベース機能である SQL Server Express LocalDB
- あなたのコンピューター上のローカルコンテナーにあるSQL Server データベース
- SQL Server Database は、ローカルネットワーク上のオンプレミスの SQL Server です。
- Azure サービスとして実行される SQL データベースである Azure SQL データベース
ローカル データベースから始めることで、コストを削減し、早期開発を簡略化できます。 後でこれらの手順を繰り返し、別のオプションを選択することで、Azure のライブ サービスに移行できます。 Azure で再作成するデータベースをローカルに作成する場合は、その時点でデータベースを Azure に移行できます。
Azure サービスに接続する場合は、次の手順に進みます。まだサインインしていない場合は、続行する前に Azure アカウントにサインインします。 Azure アカウントをお持ちでない場合は、 無料試用版にサインアップできます。
[ Azure SQL Database の構成 ] 画面で、既存の Azure SQL Database を選択し、[ 次へ] を選択します。
新しいコンポーネントを作成する必要がある場合は、次の手順に進みます。 それ以外の場合は、手順 7 に進みます。
Azure SQL データベースを作成するには:
緑色のプラス記号で [ 新規作成 ] を選択します。
[Azure SQL Database: Create new]\(新しい作成\) 画面に入力し、[作成] を選択します。
[Azure SQL Database の構成] 画面が表示されると、新しいデータベースが一覧に表示されます。 一覧から新しいデータベースを選択し、[ 次へ] を選択します。
接続文字列の名前を入力するか、既定値を選択して、[ 追加設定] を選択します。
注
Visual Studio 2022 バージョン 17.12 以降では、この手順では、パスワードレス認証方法である Microsoft Entra マネージド ID を使用してデータベースに接続します。 この画面の警告は、Visual Studio でこの手順を完了した後、Azure Portal で手動の手順を実行する必要があることを意味します。 Microsoft Entra 認証を参照してください。
接続文字列をローカル シークレット ファイルに格納するか、 Azure Key Vault に格納するかを選択し、[ 次へ] を選択します。
[ 変更の概要] 画面には、プロセスを完了した場合にプロジェクトに加えられるすべての変更が表示されます。 変更が [OK] に見える場合は、[ 完了] を選択します。
ファイアウォール規則の設定を求められたら、[ はい] を選択します。
ソリューション エクスプローラーで、[ 接続済みサービス ] ノードをダブルクリックして 、[ 接続済みサービス ] タブを開きます。[ サービスの依存関係 ] セクションに接続が表示されます。
追加した依存関係の横にある 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 管理者ユーザーとして クエリ エディター にサインインし、次のようなステートメントを実行します。
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 に関するページを参照してください。 追加するロールは、ユース ケースによって異なります。
ALTER ROLE を参照してください。
コードがSystem.Data.SqlClient参照している場合、Microsoft.Data.SqlClientは Microsoft Entra 認証をサポートしていないため、System.Data.SqlClientにアップグレードする必要があります。 アップグレードするには、Microsoft.Data.SqlClient NuGet パッケージへの参照を追加し、System.Data.SqlClient を参照するすべての using ディレクティブを更新して、Microsoft.Data.SqlClient 名前空間を参照するようにします。 いくつかの動作の変更がありますので、移植ガイドをご覧ください。
Visual Studio でプロジェクトを開きます。
ソリューション エクスプローラーで、[接続済みサービス] ノードを右クリックし、コンテキスト メニューから [追加] を選択して、使用可能なサービスのメニューを開きます。
[ 接続済みサービス ] ノードが表示されない場合は、 Project>Connected Services>Add を選択します。
[SQL Server データベース] を選択します。 [ 依存関係への接続] ページが表示されます。 いくつかのオプションが表示されます。
- Visual Studio と共にインストールされる組み込みの SQL データベース機能である SQL Server Express LocalDB
- あなたのコンピューター上のローカルコンテナーにあるSQL Server データベース
- SQL Server Database は、ローカルネットワーク上のオンプレミスの SQL Server です。
- Azure サービスとして実行される SQL データベースである Azure SQL データベース
ローカル データベースから始めることで、コストを削減し、早期開発を簡略化できます。 後でこれらの手順を繰り返し、別のオプションを選択することで、Azure のライブ サービスに移行できます。 Azure で再作成するデータベースをローカルに作成する場合は、その時点でデータベースを Azure に移行できます。
Azure サービスに接続する場合は、次の手順に進みます。まだサインインしていない場合は、続行する前に Azure アカウントにサインインします。 Azure アカウントをお持ちでない場合は、 無料試用版にサインアップできます。
[ Azure SQL Database の構成 ] 画面で、既存の Azure SQL Database を選択し、[ 次へ] を選択します。
新しいコンポーネントを作成する必要がある場合は、次の手順に進みます。 それ以外の場合は、手順 7 に進みます。
Azure SQL データベースを作成するには:
緑色のプラス記号で [ 新規作成 ] を選択します。
[Azure SQL Database: Create new]\(新しい作成\) 画面に入力し、[作成] を選択します。
[Azure SQL Database の構成] 画面が表示されると、新しいデータベースが一覧に表示されます。 一覧から新しいデータベースを選択し、[ 次へ] を選択します。
接続文字列の名前を入力するか、既定値を選択して、接続文字列をローカル シークレット ファイルに格納するか、 Azure Key Vault に格納するかを選択します。
[ 変更の概要] 画面には、プロセスを完了した場合にプロジェクトに加えられるすべての変更が表示されます。 変更が [OK] に見える場合は、[ 完了] を選択します。
ファイアウォール規則の設定を求められたら、[ はい] を選択します。
ソリューション エクスプローラーで、[ 接続済みサービス ] ノードをダブルクリックして 、[ 接続済みサービス ] タブを開きます。[ サービスの依存関係 ] セクションに接続が表示されます。
追加した依存関係の横にある 3 つの点をクリックすると、 接続 などのさまざまなオプションが表示され、ウィザードを再度開いて接続を変更できます。 また、ウィンドウの右上にある 3 つのドットをクリックして、ローカルの依存関係を開始したり、設定を変更したりするためのオプションを表示することもできます。
接続文字列にアクセスする
ASP.NET Core で開発中のアプリ シークレットの安全なストレージに従ってシークレットを安全に格納する方法について説明します。 特に、シークレット ストアから接続文字列を読み取るために、「 構成 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 での開発中のアプリ シークレットの安全なストレージに関する説明に従って安全に格納されます。 特に、シークレット ストアから接続文字列を読み取るために、「 構成 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"];