.NET .NET Aspire SQL 数据库项目托管集成
注意
此集成是 .NET.NET Aspire 社区工具包 的一部分, 不受 .NET.NET Aspire 团队正式支持。
本文介绍如何使用托管集成的 .NET Aspire SQL 数据库项目将数据库架构发布到 SQL Server 数据库。
先决条件
此集成需要基于 MSBuild.Sdk.SqlProj 或 Microsoft.Build.Sql的 SQL 数据库项目。
托管集成
若要开始使用 .NET.NET Aspire SQL 数据库项目托管集成,请在应用主机项目中安装 📦 CommunityToolkitAspireHosting.SqlDatabaseProjects NuGet 包。
dotnet add package CommunityToolkit.Aspire.Hosting.SqlDatabaseProjects
有关详细信息,请参阅 dotnet add package 或 Manage 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
接下来,编辑项目文件,将相应的 IsAspirePackageResource
的 True
标志更改为 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 自定义操作重新部署更新,而无需重启应用主机。