次の方法で共有


SQL Database プロジェクトの統合ホスティング .NET.NET Aspire

含まれるもの: ホスティング統合、ただし Client の統合は含まれません

手記

この統合は .NET.NET Aspire Community Toolkit の一部であり、 されていません。

この記事では、.NET Aspire SQL Database Projects ホスティング統合を使用して、データベース スキーマを SQL Server データベースに発行する方法について説明します。

前提 条件

この統合には、MSBuild.Sdk.SqlProj または Microsoft.Build.Sql のいずれかに基づく SQL Database プロジェクトが必要です。

ホスティング統合

.NET .NET Aspire SQL Database Projects ホスティング統合の使用を開始するには、📦 CommunityToolkit をインストールします。Aspire.Hosting.SqlDatabaseProjects アプリ ホスト プロジェクトの NuGet パッケージです。

dotnet add package CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects

詳細については、「dotnet パッケージ の追加」または「.NET アプリケーションでのパッケージの依存関係の管理」を参照してください。

使用例

MSBuild.Sdk.SqlProj への参照を追加するか、発行したい Microsoft.Build.Sql プロジェクトを アプリホストプロジェクトに含めてください。

dotnet add reference ../MySqlProj/MySqlProj.csproj

手記

現在、この参照を追加すると、参照の解析方法が原因で、プロジェクトで警告 ASPIRE004 が発生します。 .NET .NET Aspire チームはこれを認識しており、よりクリーンなソリューションに取り組んでいます。

プロジェクトをリソースとして .NET.NET Aspire AppHost に追加します。

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .AddDatabase("test");

builder.AddSqlProject<Projects.MySqlProj>("mysqlproj")
       .WithReference(sql);

.NET Aspire アプリ ホスト プロジェクトを実行すると、指定した SQL Serverに発行されている SQL Database プロジェクトが表示されます。

NuGet パッケージのサポート

バージョン 9.2.0 以降では、 MSBuild.Sdk.SqlProj または Microsoft.Build.Sql によって生成されたものなど、参照先の NuGet パッケージからデータベースをデプロイできます。 展開するには、NuGet パッケージを Aspire アプリ ホスト プロジェクトに追加します。次に例を示します。

dotnet add package ErikEJ.Dacpac.Chinook

次に、次の例に示すように、プロジェクト ファイルを編集して、対応する IsAspirePackageResourceTruePackageReference フラグを設定します。

<PackageReference Include="ErikEJ.Dacpac.Chinook" Version="1.0.0"
                  IsAspirePackageResource="True" />

最後に、アプリ モデルにリソースとしてパッケージを追加します。

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .AddDatabase("test");

builder.AddSqlPackage<Packages.ErikEJ_Dacpac_Chinook>("chinook")
       .WithReference(sql);

手記

既定では、.dacpactools/<package-id>.dacpacの下にあります。 前の例では、tools/ErikEJ.Dacpac.Chinook.dacpac のパスが求められています。 何らかの理由で、.dacpac がパッケージ内の別のパスの下にある場合は、WithDacpac("relative/path/to/some.dacpac") API を使用して、アプリ ホスト プロジェクト ディレクトリのルートに対する相対パスを指定できます。

ローカル .dacpac ファイルのサポート

プロジェクト参照以外の場所から .dacpac ファイルをソーシングする場合は、.dacpac ファイルへのパスを直接指定することもできます。

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .AddDatabase("test");

builder.AddSqlProject("mysqlproj")
       .WithDacpac("path/to/mysqlproj.dacpac")
       .WithReference(sql);

既存の SQL Server インスタンスのサポート

バージョン 9.2.0 以降では、接続文字列を使用して既存の SQL Server インスタンスに SQL Database プロジェクトを発行できます。

var builder = DistributedApplication.CreateBuilder(args);

// Get an existing SQL Server connection string from the configuration
var connection = builder.AddConnectionString("Aspire");

builder.AddSqlProject<Projects.SdkProject>("mysqlproj")
       .WithReference(connection);

builder.Build().Run();

展開オプションのサポート

パッケージのデプロイの動作に影響するオプションを定義するには、WithConfigureDacDeployOptions API を呼び出します。

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .AddDatabase("test");

builder.AddSqlProject("mysqlproj")
       .WithConfigureDacDeployOptions(options => options.IncludeCompositeObjects = true)
       .WithReference(sql);

builder.Build().Run();

上記のコード:

  • sql という名前の SQL サーバー リソースを追加し、test データベース リソースを追加します。
  • mysqlproj という名前の SQL プロジェクト リソースを追加し、DacDeployOptionsを構成します。
  • SQL プロジェクト リソースは、データベース リソースによって異なります。

再デプロイのサポート

アプリ ホストの実行中に SQL Database プロジェクトに変更を加えた場合は、Redeploy.NET ダッシュボードで .NET Aspire カスタム アクションを使用して、アプリ ホストを再起動せずに更新プログラムを再デプロイできます。

関連項目