.NET .NET Aspire SQL 数据库项目托管集成

包括:托管集成Client 集成

注意

此集成是 .NET.NET Aspire 社区工具包 的一部分, 不受 .NET.NET Aspire 团队正式支持。

本文介绍如何使用托管集成的 .NET Aspire SQL 数据库项目将数据库架构发布到 SQL Server 数据库。

先决条件

此集成需要基于 MSBuild.Sdk.SqlProjMicrosoft.Build.Sql的 SQL 数据库项目。

托管集成

若要开始使用 .NET.NET Aspire SQL 数据库项目托管集成,请在应用主机项目中安装 📦 CommunityToolkitAspireHosting.SqlDatabaseProjects NuGet 包。

dotnet add package CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects

有关详细信息,请参阅 dotnet add packageManage Package Dependencies in .NET Applications

示例用法

在 📦 应用主机项目中,添加对您要发布的 📦 MSBuild.Sdk.SqlProj 或 .NET 项目的引用:

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 数据库项目已发布到指定的 SQL Server。

NuGet 包支持

从版本 9.2.0 开始,可以从引用的 NuGet 包部署数据库,例如 📦 MSBuild.Sdk.SqlProj 生成的数据库📦 Microsoft.Build.Sql。 若要部署,请将 NuGet 包添加到 Aspire 应用主机项目,例如:

dotnet add package ErikEJ.Dacpac.Chinook

接下来,编辑项目文件,将相应的 IsAspirePackageResourceTrue 标志更改为 PackageReference,如以下示例所示:

<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);

注意

默认情况下,.dacpac 应位于 tools/<package-id>.dacpac下。 在前面的示例中,路径应为 工具/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);

部署选项支持

若要定义影响包部署行为的选项,请调用 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 Server 资源,并向其中添加 test 数据库资源。
  • 添加名为 mysqlproj 的 SQL 项目资源,然后配置 DacDeployOptions
  • SQL 项目资源取决于数据库资源。

重新部署支持

如果在应用主机运行时对 SQL 数据库项目进行更改,则可以在 Redeploy.NET 仪表板上使用 .NET Aspire 自定义操作重新部署更新,而无需重启应用主机。

另请参阅