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

包括:托管集成已包括仅限于—Client集成不包括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);

支持现有 SQL Server 实例

从版本 9.2.0 开始,可以使用连接字符串将 SQL 数据库项目发布到现有 SQL Server 实例:

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 Server 资源,并向其中添加 test 数据库资源。
  • 添加名为 mysqlproj 的 SQL 项目资源,然后配置 DacDeployOptions
  • SQL 项目资源取决于数据库资源。

重新部署支持

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

另请参阅