diff --git a/src/Bootstrap/test/AutoConfiguration.Test/Steeltoe.Bootstrap.AutoConfiguration.Test.csproj b/src/Bootstrap/test/AutoConfiguration.Test/Steeltoe.Bootstrap.AutoConfiguration.Test.csproj
index 6e06050f02..708988c34c 100644
--- a/src/Bootstrap/test/AutoConfiguration.Test/Steeltoe.Bootstrap.AutoConfiguration.Test.csproj
+++ b/src/Bootstrap/test/AutoConfiguration.Test/Steeltoe.Bootstrap.AutoConfiguration.Test.csproj
@@ -11,7 +11,7 @@
-
+
diff --git a/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlDbContextOptionsExtensionsShim.cs b/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlDbContextOptionsExtensionsShim.cs
index 7d95f4d8eb..141a4b78b6 100644
--- a/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlDbContextOptionsExtensionsShim.cs
+++ b/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlDbContextOptionsExtensionsShim.cs
@@ -21,7 +21,7 @@ public static void UseMySql(MySqlEntityFrameworkCorePackageResolver packageResol
}
else
{
- UsePomeloMySql(packageResolver, optionsBuilder, connectionString, serverVersion, mySqlOptionsAction);
+ UseMicrotingOrPomeloMySql(packageResolver, optionsBuilder, connectionString, serverVersion, mySqlOptionsAction);
}
}
@@ -48,7 +48,7 @@ private static void UseOracleMySql(MySqlEntityFrameworkCorePackageResolver packa
}
}
- private static void UsePomeloMySql(MySqlEntityFrameworkCorePackageResolver packageResolver, DbContextOptionsBuilder optionsBuilder,
+ private static void UseMicrotingOrPomeloMySql(MySqlEntityFrameworkCorePackageResolver packageResolver, DbContextOptionsBuilder optionsBuilder,
string? connectionString, object? serverVersion, object? mySqlOptionsAction)
{
if (serverVersion == null)
@@ -58,7 +58,7 @@ private static void UsePomeloMySql(MySqlEntityFrameworkCorePackageResolver packa
throw new InvalidOperationException("Server version must be specified when no connection string is provided.");
}
- // Pomelo requires to specify server version. If not provided, autodetect it (this is the part that creates an extra connection).
+ // Microting and Pomelo require to specify server version. If not provided, autodetect it (this is the part that creates an extra connection).
ServerVersionShim serverVersionShim = ServerVersionShim.AutoDetect(packageResolver, connectionString);
serverVersion = serverVersionShim.Instance;
}
diff --git a/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlEntityFrameworkCorePackageResolver.cs b/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlEntityFrameworkCorePackageResolver.cs
index 7e739fb6c1..c1610074b2 100644
--- a/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlEntityFrameworkCorePackageResolver.cs
+++ b/src/Connectors/src/EntityFrameworkCore/MySql/DynamicTypeAccess/MySqlEntityFrameworkCorePackageResolver.cs
@@ -11,9 +11,16 @@ namespace Steeltoe.Connectors.EntityFrameworkCore.MySql.DynamicTypeAccess;
///
internal sealed class MySqlEntityFrameworkCorePackageResolver : PackageResolver
{
+ private const string MicrotingPackageName = "Microting.EntityFrameworkCore.MySql ";
private const string PomeloPackageName = "Pomelo.EntityFrameworkCore.MySql";
private const string OraclePackageName = "MySql.EntityFrameworkCore";
+ private static readonly List MicrotingAssemblyNames =
+ [
+ "Microting.EntityFrameworkCore.MySql",
+ "MySqlConnector"
+ ];
+
private static readonly List PomeloAssemblyNames =
[
"Pomelo.EntityFrameworkCore.MySql",
@@ -26,11 +33,19 @@ internal sealed class MySqlEntityFrameworkCorePackageResolver : PackageResolver
"MySql.Data"
];
- public static readonly MySqlEntityFrameworkCorePackageResolver Default = new(PomeloAssemblyNames.Concat(OracleAssemblyNames).ToArray(), [
+ public static readonly MySqlEntityFrameworkCorePackageResolver Default = new(((string[])
+ [
+ .. MicrotingAssemblyNames,
+ .. PomeloAssemblyNames,
+ .. OracleAssemblyNames
+ ]).Distinct().ToArray().AsReadOnly(), [
+ MicrotingPackageName,
PomeloPackageName,
OraclePackageName
]);
+ internal static readonly MySqlEntityFrameworkCorePackageResolver MicrotingOnly = new(MicrotingAssemblyNames, [MicrotingPackageName]);
+
internal static readonly MySqlEntityFrameworkCorePackageResolver PomeloOnly = new(PomeloAssemblyNames, [PomeloPackageName]);
internal static readonly MySqlEntityFrameworkCorePackageResolver OracleOnly = new(OracleAssemblyNames, [OraclePackageName]);
diff --git a/src/Connectors/src/EntityFrameworkCore/MySql/MySqlDbContextOptionsBuilderExtensions.cs b/src/Connectors/src/EntityFrameworkCore/MySql/MySqlDbContextOptionsBuilderExtensions.cs
index a5c7a01e9f..5930ee2ce2 100644
--- a/src/Connectors/src/EntityFrameworkCore/MySql/MySqlDbContextOptionsBuilderExtensions.cs
+++ b/src/Connectors/src/EntityFrameworkCore/MySql/MySqlDbContextOptionsBuilderExtensions.cs
@@ -61,8 +61,8 @@ public static DbContextOptionsBuilder UseMySql(this DbContextOptionsBuilder buil
/// The service binding name, or null to use the default service binding.
///
///
- /// The version of the database server. This only has an effect if the Pomelo.EntityFrameworkCore.MySql package is being used. Set to null to
- /// auto-detect (at the cost of opening an extra connection).
+ /// The version of the database server. This only has an effect if the Microting.EntityFrameworkCore.MySql or Pomelo.EntityFrameworkCore.MySql package is
+ /// being used. Set to null to auto-detect (at the cost of opening an extra connection).
///
///
/// An action to allow additional MySQL specific configuration.
diff --git a/src/Connectors/src/EntityFrameworkCore/Steeltoe.Connectors.EntityFrameworkCore.csproj b/src/Connectors/src/EntityFrameworkCore/Steeltoe.Connectors.EntityFrameworkCore.csproj
index ccd06f1162..3fb6865af9 100644
--- a/src/Connectors/src/EntityFrameworkCore/Steeltoe.Connectors.EntityFrameworkCore.csproj
+++ b/src/Connectors/src/EntityFrameworkCore/Steeltoe.Connectors.EntityFrameworkCore.csproj
@@ -9,7 +9,7 @@
-
+
diff --git a/src/Connectors/test/Connectors.Test/Steeltoe.Connectors.Test.csproj b/src/Connectors/test/Connectors.Test/Steeltoe.Connectors.Test.csproj
index bf2405d3f8..1b3a36e05c 100644
--- a/src/Connectors/test/Connectors.Test/Steeltoe.Connectors.Test.csproj
+++ b/src/Connectors/test/Connectors.Test/Steeltoe.Connectors.Test.csproj
@@ -14,7 +14,7 @@
-
+
diff --git a/src/Connectors/test/EntityFrameworkCore.Test/MySql/Microting/MySqlDbContextOptionsBuilderExtensionsTest.other.cs b/src/Connectors/test/EntityFrameworkCore.Test/MySql/Microting/MySqlDbContextOptionsBuilderExtensionsTest.other.cs
new file mode 100644
index 0000000000..88c6a5bd89
--- /dev/null
+++ b/src/Connectors/test/EntityFrameworkCore.Test/MySql/Microting/MySqlDbContextOptionsBuilderExtensionsTest.other.cs
@@ -0,0 +1,88 @@
+// Licensed to the .NET Foundation under one or more agreements.
+// The .NET Foundation licenses this file to you under the Apache 2.0 License.
+// See the LICENSE file in the project root for more information.
+
+using Microsoft.AspNetCore.Builder;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
+using Steeltoe.Common.TestResources;
+using Steeltoe.Connectors.EntityFrameworkCore.MySql.DynamicTypeAccess;
+using Steeltoe.Connectors.MySql;
+using Steeltoe.Connectors.MySql.DynamicTypeAccess;
+using SteeltoeExtensions = Steeltoe.Connectors.EntityFrameworkCore.MySql.MySqlDbContextOptionsBuilderExtensions;
+
+namespace Steeltoe.Connectors.EntityFrameworkCore.Test.MySql.Microting;
+
+public sealed class MySqlDbContextOptionsBuilderExtensionsTest
+{
+ [Fact]
+ public async Task Registers_connection_string_for_default_service_binding()
+ {
+ var appSettings = new Dictionary
+ {
+ ["Steeltoe:Client:MySql:Default:ConnectionString"] = "SERVER=localhost;database=myDb;UID=steeltoe;PWD=steeltoe;connect timeout=15"
+ };
+
+ WebApplicationBuilder builder = TestWebApplicationBuilderFactory.Create();
+ builder.Configuration.AddInMemoryCollection(appSettings);
+ builder.AddMySql(MySqlPackageResolver.MySqlConnectorOnly, null, null, null);
+ builder.Services.Configure(options => options.ConnectionString += ";Use Compression=false");
+
+ builder.Services.AddDbContext((serviceProvider, options) => SteeltoeExtensions.UseMySql(options, serviceProvider,
+ MySqlEntityFrameworkCorePackageResolver.MicrotingOnly, serverVersion: MySqlServerVersion.LatestSupportedServerVersion));
+
+ await using WebApplication app = builder.Build();
+
+ await using AsyncServiceScope scope = app.Services.CreateAsyncScope();
+ await using var dbContext = scope.ServiceProvider.GetRequiredService();
+ string? connectionString = dbContext.Database.GetConnectionString();
+
+ connectionString.Should().Be(
+ "Server=localhost;User ID=steeltoe;Password=steeltoe;Database=myDb;Allow User Variables=True;Connection Timeout=15;Use Affected Rows=False;Use Compression=False");
+ }
+
+ [Fact]
+ public async Task Registers_connection_string_for_named_service_binding()
+ {
+ var appSettings = new Dictionary
+ {
+ ["Steeltoe:Client:MySql:myMySqlService:ConnectionString"] = "SERVER=localhost;database=myDb;UID=steeltoe;PWD=steeltoe;connect timeout=15"
+ };
+
+ WebApplicationBuilder builder = TestWebApplicationBuilderFactory.Create();
+ builder.Configuration.AddInMemoryCollection(appSettings);
+ builder.AddMySql(MySqlPackageResolver.MySqlConnectorOnly, null, null, null);
+ builder.Services.Configure("myMySqlService", options => options.ConnectionString += ";Use Compression=false");
+
+ builder.Services.AddDbContext((serviceProvider, options) => SteeltoeExtensions.UseMySql(options, serviceProvider,
+ MySqlEntityFrameworkCorePackageResolver.MicrotingOnly, "myMySqlService", MySqlServerVersion.LatestSupportedServerVersion));
+
+ await using WebApplication app = builder.Build();
+
+ await using AsyncServiceScope scope = app.Services.CreateAsyncScope();
+ await using var dbContext = scope.ServiceProvider.GetRequiredService();
+ string? connectionString = dbContext.Database.GetConnectionString();
+
+ connectionString.Should().Be(
+ "Server=localhost;User ID=steeltoe;Password=steeltoe;Database=myDb;Allow User Variables=True;Connection Timeout=15;Use Affected Rows=False;Use Compression=False");
+ }
+
+ [Fact]
+ public async Task Throws_for_missing_connection_string_with_version_detection()
+ {
+ WebApplicationBuilder builder = TestWebApplicationBuilderFactory.Create();
+ builder.AddMySql(MySqlPackageResolver.MySqlConnectorOnly, null, null, null);
+
+ builder.Services.AddDbContext((serviceProvider, options) => SteeltoeExtensions.UseMySql(options, serviceProvider,
+ MySqlEntityFrameworkCorePackageResolver.MicrotingOnly));
+
+ await using WebApplication app = builder.Build();
+ await using AsyncServiceScope scope = app.Services.CreateAsyncScope();
+
+ // ReSharper disable once AccessToDisposedClosure
+ Action action = () => _ = scope.ServiceProvider.GetRequiredService();
+
+ action.Should().ThrowExactly().WithMessage("Server version must be specified when no connection string is provided.");
+ }
+}
diff --git a/src/Connectors/test/EntityFrameworkCore.Test/MySql/Pomelo/MySqlDbContextOptionsBuilderExtensionsTest.cs b/src/Connectors/test/EntityFrameworkCore.Test/MySql/Pomelo/MySqlDbContextOptionsBuilderExtensionsTest.net80-90.cs
similarity index 93%
rename from src/Connectors/test/EntityFrameworkCore.Test/MySql/Pomelo/MySqlDbContextOptionsBuilderExtensionsTest.cs
rename to src/Connectors/test/EntityFrameworkCore.Test/MySql/Pomelo/MySqlDbContextOptionsBuilderExtensionsTest.net80-90.cs
index 7e8e974935..fb7001e67a 100644
--- a/src/Connectors/test/EntityFrameworkCore.Test/MySql/Pomelo/MySqlDbContextOptionsBuilderExtensionsTest.cs
+++ b/src/Connectors/test/EntityFrameworkCore.Test/MySql/Pomelo/MySqlDbContextOptionsBuilderExtensionsTest.net80-90.cs
@@ -16,11 +16,7 @@ namespace Steeltoe.Connectors.EntityFrameworkCore.Test.MySql.Pomelo;
public sealed class MySqlDbContextOptionsBuilderExtensionsTest
{
-#if NET10_0_OR_GREATER
- [Fact(Skip = "Temporary workaround: Unstable EF Core 10 package for Pomelo.EntityFrameworkCore.MySql is not available yet.")]
-#else
[Fact]
-#endif
public async Task Registers_connection_string_for_default_service_binding()
{
var appSettings = new Dictionary
@@ -46,11 +42,7 @@ public async Task Registers_connection_string_for_default_service_binding()
"Server=localhost;User ID=steeltoe;Password=steeltoe;Database=myDb;Allow User Variables=True;Connection Timeout=15;Use Affected Rows=False;Use Compression=False");
}
-#if NET10_0_OR_GREATER
- [Fact(Skip = "Temporary workaround: Unstable EF Core 10 package for Pomelo.EntityFrameworkCore.MySql is not available yet.")]
-#else
[Fact]
-#endif
public async Task Registers_connection_string_for_named_service_binding()
{
var appSettings = new Dictionary
diff --git a/src/Connectors/test/EntityFrameworkCore.Test/Steeltoe.Connectors.EntityFrameworkCore.Test.csproj b/src/Connectors/test/EntityFrameworkCore.Test/Steeltoe.Connectors.EntityFrameworkCore.Test.csproj
index 626d5effb2..9a56a36f71 100644
--- a/src/Connectors/test/EntityFrameworkCore.Test/Steeltoe.Connectors.EntityFrameworkCore.Test.csproj
+++ b/src/Connectors/test/EntityFrameworkCore.Test/Steeltoe.Connectors.EntityFrameworkCore.Test.csproj
@@ -1,27 +1,18 @@
-
+
net10.0;net9.0;net8.0
-
-
-
- $(NoWarn);NU1608
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -29,4 +20,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/Management/test/Endpoint.Test/Steeltoe.Management.Endpoint.Test.csproj b/src/Management/test/Endpoint.Test/Steeltoe.Management.Endpoint.Test.csproj
index 97607ba184..5e8248c8ea 100644
--- a/src/Management/test/Endpoint.Test/Steeltoe.Management.Endpoint.Test.csproj
+++ b/src/Management/test/Endpoint.Test/Steeltoe.Management.Endpoint.Test.csproj
@@ -14,9 +14,9 @@
-
-
-
+
+
+
diff --git a/src/Steeltoe.All.slnx.DotSettings b/src/Steeltoe.All.slnx.DotSettings
index e5d2d1cfe6..354c182659 100644
--- a/src/Steeltoe.All.slnx.DotSettings
+++ b/src/Steeltoe.All.slnx.DotSettings
@@ -695,6 +695,7 @@ $left$ = $right$;
True
True
True
+ True
True
True
True
diff --git a/versions.props b/versions.props
index 618acfc5e9..b07fc39574 100644
--- a/versions.props
+++ b/versions.props
@@ -15,7 +15,7 @@
7.0.*
3.8.*
4.20.69
- 2.5.*
+ 2.6.*
9.7.*
13.0.*
3.3.*
@@ -32,24 +32,6 @@
3.1.*
-
- 8.0.*
- $(EntityFrameworkCoreTestVersion)
-
-
-
- 9.0.*
- $(EntityFrameworkCoreTestVersion)
-
-
-
- 10.0.*
-
-
- 9.0.*
-
-
-