From 40eb20885684134124b002b50287795dca12b81f Mon Sep 17 00:00:00 2001 From: Eric Erhardt Date: Wed, 29 Oct 2025 13:31:29 -0500 Subject: [PATCH 1/2] Target net10.0 in client integrations This is especially important for EF integrations where we need to explicitly reference the 10 version of EF when targeting net10. --- Directory.Packages.props | 18 ++++++++++++++++++ eng/Versions.props | 18 +++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index 0ecf20c7204..f022286e618 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -247,8 +247,25 @@ + + + + + + + + + + + + + + + + + @@ -261,5 +278,6 @@ + diff --git a/eng/Versions.props b/eng/Versions.props index 997f4d8f6c5..763752bc468 100644 --- a/eng/Versions.props +++ b/eng/Versions.props @@ -7,7 +7,7 @@ $(MajorVersion).$(MinorVersion).$(PatchVersion) preview.1 net8.0 - $(DefaultTargetFramework);net9.0 + $(DefaultTargetFramework);net9.0;net10.0 8.0.21 9.0.10 @@ -56,11 +56,27 @@ + + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 10.0.0-rc.2.25502.107 10.0.0-rc.2.25502.107 + 10.0.0-rc.2.25502.107 10.0.0-rc.2.25502.107 10.0.0-rc.2.25502.107 10.0.0-rc.2.25502.107 From d174da8285e8f231aa08cad0d82618059f716c20 Mon Sep 17 00:00:00 2001 From: Eric Erhardt Date: Thu, 30 Oct 2025 06:48:59 -0500 Subject: [PATCH 2/2] Fix tests --- Directory.Packages.props | 4 +-- ...spireAzureEfCoreCosmosDBExtensionsTests.cs | 4 +-- .../ConformanceTests.cs | 2 +- .../EnrichCosmosDbTests.cs | 2 +- ...SqlServerEFCoreSqlClientExtensionsTests.cs | 28 +++++++++++++------ 5 files changed, 24 insertions(+), 16 deletions(-) diff --git a/Directory.Packages.props b/Directory.Packages.props index f022286e618..fbade2b27d9 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -244,7 +244,6 @@ - @@ -252,7 +251,7 @@ - + @@ -278,6 +277,5 @@ - diff --git a/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/AspireAzureEfCoreCosmosDBExtensionsTests.cs b/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/AspireAzureEfCoreCosmosDBExtensionsTests.cs index 92ebc285442..db627beb05a 100644 --- a/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/AspireAzureEfCoreCosmosDBExtensionsTests.cs +++ b/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/AspireAzureEfCoreCosmosDBExtensionsTests.cs @@ -13,7 +13,7 @@ namespace Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests; public class AspireAzureEfCoreCosmosDBExtensionsTests { - private const string ConnectionString = "AccountEndpoint=https://fake-account.documents.azure.com:443/;AccountKey=;"; + internal const string ConnectionString = "AccountEndpoint=https://fake-account.documents.azure.com:443/;AccountKey=fake;"; [Fact] public void CanConfigureDbContextOptions() @@ -129,7 +129,7 @@ public void RequestTimeoutFromBuilderWinsOverOthers(bool useSettings) [Fact] public void CanHave2DbContexts() { - const string connectionString2 = "AccountEndpoint=https://fake-account2.documents.azure.com:443/;AccountKey=;"; + const string connectionString2 = "AccountEndpoint=https://fake-account2.documents.azure.com:443/;AccountKey=fake;"; var builder = Host.CreateEmptyApplicationBuilder(null); builder.Configuration.AddInMemoryCollection([ diff --git a/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/ConformanceTests.cs b/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/ConformanceTests.cs index a7422787d7f..ddad8db21b7 100644 --- a/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/ConformanceTests.cs +++ b/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/ConformanceTests.cs @@ -30,7 +30,7 @@ protected override void PopulateConfiguration(ConfigurationManager configuration => configuration.AddInMemoryCollection(new KeyValuePair[] { new KeyValuePair("Aspire:Microsoft:EntityFrameworkCore:Cosmos:ConnectionString", - "Host=fake;Database=catalog"), + AspireAzureEfCoreCosmosDBExtensionsTests.ConnectionString), }); protected override void RegisterComponent(HostApplicationBuilder builder, Action? configure = null, string? key = null) diff --git a/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/EnrichCosmosDbTests.cs b/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/EnrichCosmosDbTests.cs index 4feae682076..c1fab6f6db3 100644 --- a/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/EnrichCosmosDbTests.cs +++ b/tests/Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests/EnrichCosmosDbTests.cs @@ -14,7 +14,7 @@ namespace Aspire.Microsoft.EntityFrameworkCore.Cosmos.Tests; public class EnrichCosmosDbTests : ConformanceTests { - private const string ConnectionString = "Host=fake;Database=catalog"; + private const string ConnectionString = AspireAzureEfCoreCosmosDBExtensionsTests.ConnectionString; private const string DatabaseName = "TestDatabase"; protected override void RegisterComponent(HostApplicationBuilder builder, Action? configure = null, string? key = null) diff --git a/tests/Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests/AspireSqlServerEFCoreSqlClientExtensionsTests.cs b/tests/Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests/AspireSqlServerEFCoreSqlClientExtensionsTests.cs index b5145f38d5f..f06ea0a9de8 100644 --- a/tests/Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests/AspireSqlServerEFCoreSqlClientExtensionsTests.cs +++ b/tests/Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests/AspireSqlServerEFCoreSqlClientExtensionsTests.cs @@ -15,7 +15,7 @@ namespace Aspire.Microsoft.EntityFrameworkCore.SqlServer.Tests; public class AspireSqlServerEFCoreSqlClientExtensionsTests { - private const string ConnectionString = "Data Source=fake;Database=master;Encrypt=True"; + private const string ConnectionString = "Data Source=fake;Initial Catalog=master;Encrypt=True"; [Fact] public void ReadsFromConnectionStringsCorrectly() @@ -30,7 +30,7 @@ public void ReadsFromConnectionStringsCorrectly() using var host = builder.Build(); var context = host.Services.GetRequiredService(); - Assert.Equal(ConnectionString, context.Database.GetDbConnection().ConnectionString); + AssertCorrectConnectionString(ConnectionString, context.Database.GetDbConnection().ConnectionString); } [Fact] @@ -47,7 +47,7 @@ public void ConnectionStringCanBeSetInCode() var context = host.Services.GetRequiredService(); var actualConnectionString = context.Database.GetDbConnection().ConnectionString; - Assert.Equal(ConnectionString, actualConnectionString); + AssertCorrectConnectionString(ConnectionString, actualConnectionString); // the connection string from config should not be used since code set it explicitly Assert.DoesNotContain("unused", actualConnectionString); } @@ -67,7 +67,7 @@ public void ConnectionNameWinsOverConfigSection() var context = host.Services.GetRequiredService(); var actualConnectionString = context.Database.GetDbConnection().ConnectionString; - Assert.Equal(ConnectionString, actualConnectionString); + AssertCorrectConnectionString(ConnectionString, actualConnectionString); // the connection string from config should not be used since it was found in ConnectionStrings Assert.DoesNotContain("unused", actualConnectionString); } @@ -103,7 +103,7 @@ public void CanConfigureDbContextOptions() // ensure the connection string from config was respected var actualConnectionString = context.Database.GetDbConnection().ConnectionString; - Assert.Equal(ConnectionString, actualConnectionString); + AssertCorrectConnectionString(ConnectionString, actualConnectionString); // ensure the retry strategy is enabled and set to its default value Assert.NotNull(extension.ExecutionStrategyFactory); @@ -147,7 +147,7 @@ public void CanConfigureDbContextOptionsWithoutRetry() // ensure the connection string from config was respected var actualConnectionString = context.Database.GetDbConnection().ConnectionString; - Assert.Equal(ConnectionString, actualConnectionString); + AssertCorrectConnectionString(ConnectionString, actualConnectionString); // ensure no retry strategy was registered Assert.Null(extension.ExecutionStrategyFactory); @@ -230,7 +230,7 @@ public void CommandTimeoutFromBuilderWinsOverOthers(bool useSettings) [Fact] public void CanHave2DbContexts() { - const string connectionString2 = "Data Source=fake2;Database=master2;Encrypt=True"; + const string connectionString2 = "Data Source=fake2;Initial Catalog=master2;Encrypt=True"; var builder = Host.CreateEmptyApplicationBuilder(null); builder.Configuration.AddInMemoryCollection([ @@ -246,10 +246,10 @@ public void CanHave2DbContexts() var context2 = host.Services.GetRequiredService(); var actualConnectionString = context.Database.GetDbConnection().ConnectionString; - Assert.Equal(ConnectionString, actualConnectionString); + AssertCorrectConnectionString(ConnectionString, actualConnectionString); actualConnectionString = context2.Database.GetDbConnection().ConnectionString; - Assert.Equal(connectionString2, actualConnectionString); + AssertCorrectConnectionString(connectionString2, actualConnectionString); } [Theory] @@ -351,6 +351,16 @@ public void AddSqlServerDbContext_WithConnectionSpecificAndContextSpecificSettin Assert.Equal(120, capturedSettings.CommandTimeout); } + private static void AssertCorrectConnectionString(string expectedConnectionString, string actualConnectionString) + { +#if NET10_0_OR_GREATER + // In .NET 10, the connection string may have additional parameters appended, so we check the start only. + Assert.StartsWith(expectedConnectionString, actualConnectionString); +#else + Assert.Equal(expectedConnectionString, actualConnectionString); +#endif + } + public class TestDbContext2 : DbContext { public TestDbContext2(DbContextOptions options) : base(options)