Skip to content

Commit 85ced95

Browse files
authored
Add DbGate support for SqlServer (#493)
* Add DbGate support for SqlServer * Add tests * Update README * Update CODEOWNERS
1 parent 6b47e96 commit 85ced95

File tree

19 files changed

+599
-21
lines changed

19 files changed

+599
-21
lines changed

CODEOWNERS

+6-1
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,9 @@
9797
# CommunityToolkit.Aspire.Hosting.Redis.Extensions
9898
/src/CommunityToolkit.Aspire.Hosting.Redis.Extensions/ @Alirexaa
9999
/tests/CommunityToolkit.Aspire.Hosting.Redis.Extensions.Tests/ @Alirexaa
100-
/examples/redis-ext/ @Alirexaa
100+
/examples/redis-ext/ @Alirexaa
101+
102+
# CommunityToolkit.Aspire.Hosting.SqlServer.Extensions
103+
/src/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/ @Alirexaa
104+
/tests/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.Tests/ @Alirexaa
105+
/examples/sqlserver-ext/ @Alirexaa

CommunityToolkit.Aspire.sln

+25-1
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,14 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommunityToolkit.Aspire.Hos
349349
EndProject
350350
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommunityToolkit.Aspire.Hosting.MailPit.AppHost", "examples\mailpit\CommunityToolkit.Aspire.Hosting.MailPit.AppHost\CommunityToolkit.Aspire.Hosting.MailPit.AppHost.csproj", "{69343427-D50D-4600-ADC0-C1B1910C0287}"
351351
EndProject
352+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommunityToolkit.Aspire.Hosting.SqlServer.Extensions", "src\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj", "{E83D626B-D2DC-488D-B2BE-CA4C6049F1E0}"
353+
EndProject
354+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "sqlserver-ext", "sqlserver-ext", "{A4E81DCC-B13D-4513-8933-E7E405439AE9}"
355+
EndProject
356+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.AppHost", "examples\sqlserver-ext\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.AppHost\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.AppHost.csproj", "{C38B5A72-F717-4C7F-AB4C-54039A439D4D}"
357+
EndProject
358+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.Tests", "tests\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.Tests\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.Tests.csproj", "{B98C88E3-2AEE-4B9F-8736-4A7E746AE28B}"
359+
EndProject
352360
Global
353361
GlobalSection(SolutionConfigurationPlatforms) = preSolution
354362
Debug|Any CPU = Debug|Any CPU
@@ -919,6 +927,18 @@ Global
919927
{69343427-D50D-4600-ADC0-C1B1910C0287}.Debug|Any CPU.Build.0 = Debug|Any CPU
920928
{69343427-D50D-4600-ADC0-C1B1910C0287}.Release|Any CPU.ActiveCfg = Release|Any CPU
921929
{69343427-D50D-4600-ADC0-C1B1910C0287}.Release|Any CPU.Build.0 = Release|Any CPU
930+
{E83D626B-D2DC-488D-B2BE-CA4C6049F1E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
931+
{E83D626B-D2DC-488D-B2BE-CA4C6049F1E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
932+
{E83D626B-D2DC-488D-B2BE-CA4C6049F1E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
933+
{E83D626B-D2DC-488D-B2BE-CA4C6049F1E0}.Release|Any CPU.Build.0 = Release|Any CPU
934+
{C38B5A72-F717-4C7F-AB4C-54039A439D4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
935+
{C38B5A72-F717-4C7F-AB4C-54039A439D4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
936+
{C38B5A72-F717-4C7F-AB4C-54039A439D4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
937+
{C38B5A72-F717-4C7F-AB4C-54039A439D4D}.Release|Any CPU.Build.0 = Release|Any CPU
938+
{B98C88E3-2AEE-4B9F-8736-4A7E746AE28B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
939+
{B98C88E3-2AEE-4B9F-8736-4A7E746AE28B}.Debug|Any CPU.Build.0 = Debug|Any CPU
940+
{B98C88E3-2AEE-4B9F-8736-4A7E746AE28B}.Release|Any CPU.ActiveCfg = Release|Any CPU
941+
{B98C88E3-2AEE-4B9F-8736-4A7E746AE28B}.Release|Any CPU.Build.0 = Release|Any CPU
922942
EndGlobalSection
923943
GlobalSection(SolutionProperties) = preSolution
924944
HideSolutionNode = FALSE
@@ -1088,12 +1108,16 @@ Global
10881108
{7068DDA8-71B9-428E-BCC3-89658670B830} = {35E5A4C8-219B-44AC-AB93-B07A67BCC810}
10891109
{8C463360-0156-461C-A065-CC30FE3B0595} = {35E5A4C8-219B-44AC-AB93-B07A67BCC810}
10901110
{A5C87DA6-6793-4824-88E5-4F8310FE55B8} = {35E5A4C8-219B-44AC-AB93-B07A67BCC810}
1111+
{734EF69D-EE4D-4E9B-96BD-A44E53C5D2EC} = {8519CC01-1370-47C8-AD94-B0F326B1563F}
10911112
{73E7BC19-A626-4C55-990B-A878BF84D4CA} = {414151D4-7009-4E78-A5C6-D99EBD1E67D1}
10921113
{9C66ECFF-8077-4D5A-9CEB-6E9AB6CCBE94} = {899F0713-7FC6-4750-BAFC-AC650B35B453}
1093-
{734EF69D-EE4D-4E9B-96BD-A44E53C5D2EC} = {8519CC01-1370-47C8-AD94-B0F326B1563F}
10941114
{08EDD2B6-FFC1-42F9-AE62-479178A381FF} = {734EF69D-EE4D-4E9B-96BD-A44E53C5D2EC}
10951115
{547ED5DB-CD15-42B8-99C7-30274C5D843E} = {734EF69D-EE4D-4E9B-96BD-A44E53C5D2EC}
10961116
{69343427-D50D-4600-ADC0-C1B1910C0287} = {734EF69D-EE4D-4E9B-96BD-A44E53C5D2EC}
1117+
{E83D626B-D2DC-488D-B2BE-CA4C6049F1E0} = {414151D4-7009-4E78-A5C6-D99EBD1E67D1}
1118+
{A4E81DCC-B13D-4513-8933-E7E405439AE9} = {8519CC01-1370-47C8-AD94-B0F326B1563F}
1119+
{C38B5A72-F717-4C7F-AB4C-54039A439D4D} = {A4E81DCC-B13D-4513-8933-E7E405439AE9}
1120+
{B98C88E3-2AEE-4B9F-8736-4A7E746AE28B} = {899F0713-7FC6-4750-BAFC-AC650B35B453}
10971121
EndGlobalSection
10981122
GlobalSection(ExtensibilityGlobals) = postSolution
10991123
SolutionGuid = {08B1D4B8-D2C5-4A64-BB8B-E1A2B29525F0}

README.md

+6
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ This repository contains the source code for the .NET Aspire Community Toolkit,
4343
| - **Learn More**: [`Hosting.MongoDB.Extensions`][mongodb-ext-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.MongoDB.Extensions][mongodb-ext-shields]][mongodb-ext-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.MongoDB.Extensions][mongodb-ext-shields-preview]][mongodb-ext-nuget-preview] | An integration that contains some additional extensions for hosting MongoDB container. |
4444
| - **Learn More**: [`Hosting.PostgreSQL.Extensions`][postgres-ext-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.PostgreSQL.Extensions][postgres-ext-shields]][postgres-ext-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions][postgres-ext-shields-preview]][postgres-ext-nuget-preview] | An integration that contains some additional extensions for hosting PostgreSQL container. |
4545
| - **Learn More**: [`Hosting.Redis.Extensions`][redis-ext-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Redis.Extensions][redis-ext-shields]][redis-ext-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.Redis.Extensions][redis-ext-shields-preview]][redis-ext-nuget-preview] | An integration that contains some additional extensions for hosting Redis container. |
46+
| - **Learn More**: [`Hosting.SqlServer.Extensions`][sqlserver-ext-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.SqlServer.Extensions][sqlserver-ext-shields]][sqlserver-ext-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.SqlServer.Extensions][sqlserver-ext-shields-preview]][sqlserver-ext-nuget-preview] | An integration that contains some additional extensions for hosting SqlServer container. |
4647
| - **Learn More**: [`Hosting.LavinMQ`][lavinmq-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.LavinMQ][lavinmq-shields]][lavinmq-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.LavinMQ][lavinmq-shields-preview]][lavinmq-nuget-preview] | An Aspire hosting integration for [LavinMQ](https://www.lavinmq.com). |
4748
| - **Learn More**: [`Hosting.MailPit`][mailpit-ext-integration-docs] <br /> - Stable 📦: [![CommunityToolkit.Aspire.Hosting.MailPit][mailpit-ext-shields]][mailpit-ext-nuget] <br /> - Preview 📦: [![CommunityToolkit.Aspire.Hosting.MailPit][mailpit-ext-shields-preview]][mailpit-ext-nuget-preview] | An Aspire integration leveraging the [MailPit](https://mailpit.axllent.org/) container. |
4849

@@ -219,6 +220,11 @@ This project is supported by the [.NET Foundation](https://dotnetfoundation.org)
219220
[postgres-ext-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions/
220221
[postgres-ext-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions?label=nuget%20(preview)
221222
[postgres-ext-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions/absoluteLatest
223+
[sqlserver-ext-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-sqlserver-extensions
224+
[sqlserver-ext-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions
225+
[sqlserver-ext-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/
226+
[sqlserver-ext-shields-preview]: https://img.shields.io/nuget/vpre/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions?label=nuget%20(preview)
227+
[sqlserver-ext-nuget-preview]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.SqlServer.Extensions/absoluteLatest
222228
[redis-ext-integration-docs]: https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-redis-extensions
223229
[redis-ext-shields]: https://img.shields.io/nuget/v/CommunityToolkit.Aspire.Hosting.Redis.Extensions
224230
[redis-ext-nuget]: https://nuget.org/packages/CommunityToolkit.Aspire.Hosting.Redis.Extensions/

examples/dbgate/CommunityToolkit.Aspire.Hosting.DbGate.AppHost/CommunityToolkit.Aspire.Hosting.DbGate.AppHost.csproj

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.MongoDB.Extensions\CommunityToolkit.Aspire.Hosting.MongoDB.Extensions.csproj" IsAspireProjectResource="false" />
1818
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions\CommunityToolkit.Aspire.Hosting.PostgreSQL.Extensions.csproj" IsAspireProjectResource="false" />
1919
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.Redis.Extensions\CommunityToolkit.Aspire.Hosting.Redis.Extensions.csproj" IsAspireProjectResource="false" />
20+
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj" IsAspireProjectResource="false" />
2021
</ItemGroup>
2122

2223

examples/dbgate/CommunityToolkit.Aspire.Hosting.DbGate.AppHost/Program.cs

+11
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,15 @@
2121
var redis1 = builder.AddRedis("redis1").WithDbGate();
2222
var redis2 = builder.AddRedis("redis2").WithDbGate();
2323

24+
var sqlserver1 = builder.AddSqlServer("sqlserver1")
25+
.WithDbGate(c => c.WithHostPort(8068));
26+
sqlserver1.AddDatabase("db9");
27+
sqlserver1.AddDatabase("db10");
28+
29+
var sqlserver2 = builder.AddSqlServer("sqlserver2")
30+
.WithDbGate();
31+
sqlserver2.AddDatabase("db11");
32+
sqlserver2.AddDatabase("db12");
33+
34+
2435
builder.Build().Run();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<Sdk Name="Aspire.AppHost.Sdk" Version="$(AspireAppHostSdkVersion)" />
3+
4+
<PropertyGroup>
5+
<OutputType>Exe</OutputType>
6+
<ImplicitUsings>enable</ImplicitUsings>
7+
<Nullable>enable</Nullable>
8+
<IsAspireHost>true</IsAspireHost>
9+
</PropertyGroup>
10+
11+
<ItemGroup>
12+
<PackageReference Include="Aspire.Hosting.AppHost" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.DbGate\CommunityToolkit.Aspire.Hosting.DbGate.csproj" IsAspireProjectResource="false" />
17+
<ProjectReference Include="..\..\..\src\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions\CommunityToolkit.Aspire.Hosting.SqlServer.Extensions.csproj" IsAspireProjectResource="false" />
18+
</ItemGroup>
19+
20+
21+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
var builder = DistributedApplication.CreateBuilder(args);
2+
3+
var sqlserver1 = builder.AddSqlServer("sqlserver1")
4+
.WithDbGate(c => c.WithHostPort(8068));
5+
sqlserver1.AddDatabase("db1");
6+
sqlserver1.AddDatabase("db2");
7+
8+
var sqlserver2 = builder.AddSqlServer("sqlserver2")
9+
.WithDbGate();
10+
sqlserver2.AddDatabase("db3");
11+
sqlserver2.AddDatabase("db4");
12+
13+
builder.Build().Run();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
{
2+
"$schema": "https://json.schemastore.org/launchsettings.json",
3+
"profiles": {
4+
"https": {
5+
"commandName": "Project",
6+
"dotnetRunMessages": true,
7+
"launchBrowser": true,
8+
"applicationUrl": "https://localhost:17247;http://localhost:15069",
9+
"environmentVariables": {
10+
"ASPNETCORE_ENVIRONMENT": "Development",
11+
"DOTNET_ENVIRONMENT": "Development",
12+
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "https://localhost:21240",
13+
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "https://localhost:22178"
14+
}
15+
},
16+
"http": {
17+
"commandName": "Project",
18+
"dotnetRunMessages": true,
19+
"launchBrowser": true,
20+
"applicationUrl": "http://localhost:15069",
21+
"environmentVariables": {
22+
"ASPNETCORE_ENVIRONMENT": "Development",
23+
"DOTNET_ENVIRONMENT": "Development",
24+
"DOTNET_DASHBOARD_OTLP_ENDPOINT_URL": "http://localhost:19034",
25+
"DOTNET_RESOURCE_SERVICE_ENDPOINT_URL": "http://localhost:20118"
26+
}
27+
}
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"Logging": {
3+
"LogLevel": {
4+
"Default": "Information",
5+
"Microsoft.AspNetCore": "Warning",
6+
"Aspire.Hosting.Dcp": "Warning"
7+
}
8+
}
9+
}

src/CommunityToolkit.Aspire.Hosting.DbGate/DbGateContainerImageTags.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ internal static class DbGateContainerImageTags
55
public const string Registry = "docker.io";
66
/// <summary>dbgate/dbgate</summary>
77
public const string Image = "dbgate/dbgate";
8-
/// <summary>v1.12</summary>
8+
/// <summary>6.1.4</summary>
99
public const string Tag = "6.1.4";
1010
}
1111

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<AdditionalPackageTags>hosting sqlserver dbgate</AdditionalPackageTags>
5+
<Description>A .NET Aspire integration for extending sqlserver hosting.</Description>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="Aspire.Hosting" />
10+
<PackageReference Include="Aspire.Hosting.SqlServer" />
11+
</ItemGroup>
12+
13+
<ItemGroup>
14+
<Compile Include="$(SharedDir)\VolumeNameGenerator.cs" Link="Utils\VolumeNameGenerator.cs" />
15+
</ItemGroup>
16+
17+
<ItemGroup>
18+
<ProjectReference Include="..\CommunityToolkit.Aspire.Hosting.DbGate\CommunityToolkit.Aspire.Hosting.DbGate.csproj" />
19+
</ItemGroup>
20+
21+
</Project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#nullable enable
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Aspire.Hosting.SqlServerBuilderExtensions
2+
static Aspire.Hosting.SqlServerBuilderExtensions.WithDbGate(this Aspire.Hosting.ApplicationModel.IResourceBuilder<Aspire.Hosting.ApplicationModel.SqlServerServerResource!>! builder, System.Action<Aspire.Hosting.ApplicationModel.IResourceBuilder<Aspire.Hosting.ApplicationModel.DbGateContainerResource!>!>? configureContainer = null, string? containerName = null) -> Aspire.Hosting.ApplicationModel.IResourceBuilder<Aspire.Hosting.ApplicationModel.SqlServerServerResource!>!
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# CommunityToolkit.Aspire.Hosting.SqlServer.Extensions library
2+
3+
This integration contains extensions for the [SqlServer hosting package](https://nuget.org/packages/Aspire.Hosting.SqlServer) for .NET Aspire.
4+
5+
The integration provides support for running [DbGate](https://github.com/dbgate/dbgate) to interact with the SqlServer database.
6+
7+
## Getting Started
8+
9+
### Install the package
10+
11+
In your AppHost project, install the package using the following command:
12+
13+
```dotnetcli
14+
dotnet add package CommunityToolkit.Aspire.Hosting.SqlServer.Extensions
15+
```
16+
17+
### Example usage
18+
19+
Then, in the _Program.cs_ file of `AppHost`, define an SqlServer resource, then call `AddSqlServer`:
20+
21+
```csharp
22+
var sqlserver = builder.AddSqlServer("sqlserver")
23+
.WithDbGate();
24+
```
25+
26+
## Additional Information
27+
28+
https://learn.microsoft.com/dotnet/aspire/community-toolkit/hosting-sqlserver-extensions
29+
30+
## Feedback & contributing
31+
32+
https://github.com/CommunityToolkit/Aspire

0 commit comments

Comments
 (0)