diff --git a/readme.md b/readme.md
index a7937fb..39d0ef7 100644
--- a/readme.md
+++ b/readme.md
@@ -161,7 +161,7 @@ internal static string BuildEtag(string timeStamp, string? suffix)
return $"\"{AssemblyWriteTime}-{timeStamp}-{suffix}\"";
}
```
-snippet source | anchor
+snippet source | anchor
@@ -330,38 +330,42 @@ app.UseDelta(
By default, Delta uses `HttpContext.RequestServices` to discover the SqlConnection and SqlTransaction:
-
-
+
+
```cs
-static (Type sqlConnection, Type transaction) FindConnectionType()
+var sqlConnectionType = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient");
+if (sqlConnectionType != null)
{
- var sqlConnection = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient");
- if (sqlConnection != null)
- {
- var transaction = sqlConnection.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!;
- return (sqlConnection, transaction);
- }
-
- var npgsqlConnection = Type.GetType("Npgsql.NpgsqlConnection, Npgsql");
- if (npgsqlConnection != null)
- {
- var transaction = npgsqlConnection.Assembly.GetType("Npgsql.NpgsqlTransaction")!;
- return (npgsqlConnection, transaction);
- }
+ connectionType = sqlConnectionType;
+ transactionType = sqlConnectionType.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!;
+ return;
+}
- throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction");
+var npgConnectionType = Type.GetType("Npgsql.NpgsqlConnection, Npgsql");
+if (npgConnectionType != null)
+{
+ connectionType = npgConnectionType;
+ transactionType = npgConnectionType.Assembly.GetType("Npgsql.NpgsqlTransaction")!;
+ return;
}
+throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction");
+```
+snippet source | anchor
+
+
+
+
+```cs
static Connection DiscoverConnection(HttpContext httpContext)
{
- var (connectionType, transactionType) = FindConnectionType();
var provider = httpContext.RequestServices;
var connection = (DbConnection) provider.GetRequiredService(connectionType);
var transaction = (DbTransaction?) provider.GetService(transactionType);
return new(connection, transaction);
}
```
-snippet source | anchor
+snippet source | anchor
To use custom connection discovery:
diff --git a/readme.source.md b/readme.source.md
index 705cb25..9ddb035 100644
--- a/readme.source.md
+++ b/readme.source.md
@@ -188,6 +188,8 @@ snippet: ShouldExecute
By default, Delta uses `HttpContext.RequestServices` to discover the SqlConnection and SqlTransaction:
+snippet: DiscoverConnectionType
+
snippet: DiscoverConnection
To use custom connection discovery:
diff --git a/src/Delta/DeltaExtensions_ConnectionDiscovery.cs b/src/Delta/DeltaExtensions_ConnectionDiscovery.cs
index 6c030ad..7863e51 100644
--- a/src/Delta/DeltaExtensions_ConnectionDiscovery.cs
+++ b/src/Delta/DeltaExtensions_ConnectionDiscovery.cs
@@ -2,30 +2,13 @@ namespace Delta;
public static partial class DeltaExtensions
{
- #region DiscoverConnection
-
- static (Type sqlConnection, Type transaction) FindConnectionType()
- {
- var sqlConnection = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient");
- if (sqlConnection != null)
- {
- var transaction = sqlConnection.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!;
- return (sqlConnection, transaction);
- }
+ static Type connectionType;
+ static Type transactionType;
- var npgsqlConnection = Type.GetType("Npgsql.NpgsqlConnection, Npgsql");
- if (npgsqlConnection != null)
- {
- var transaction = npgsqlConnection.Assembly.GetType("Npgsql.NpgsqlTransaction")!;
- return (npgsqlConnection, transaction);
- }
-
- throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction");
- }
+ #region DiscoverConnection
static Connection DiscoverConnection(HttpContext httpContext)
{
- var (connectionType, transactionType) = FindConnectionType();
var provider = httpContext.RequestServices;
var connection = (DbConnection) provider.GetRequiredService(connectionType);
var transaction = (DbTransaction?) provider.GetService(transactionType);
diff --git a/src/Delta/DeltaExtensions_Shared.cs b/src/Delta/DeltaExtensions_Shared.cs
index 5f689c0..15922ff 100644
--- a/src/Delta/DeltaExtensions_Shared.cs
+++ b/src/Delta/DeltaExtensions_Shared.cs
@@ -41,6 +41,28 @@ static DeltaExtensions()
AssemblyWriteTime = File.GetLastWriteTime(webAssemblyLocation).Ticks.ToString();
#endregion
+
+ #region DiscoverConnectionType
+
+ var sqlConnectionType = Type.GetType("Microsoft.Data.SqlClient.SqlConnection, Microsoft.Data.SqlClient");
+ if (sqlConnectionType != null)
+ {
+ connectionType = sqlConnectionType;
+ transactionType = sqlConnectionType.Assembly.GetType("Microsoft.Data.SqlClient.SqlTransaction")!;
+ return;
+ }
+
+ var npgConnectionType = Type.GetType("Npgsql.NpgsqlConnection, Npgsql");
+ if (npgConnectionType != null)
+ {
+ connectionType = npgConnectionType;
+ transactionType = npgConnectionType.Assembly.GetType("Npgsql.NpgsqlTransaction")!;
+ return;
+ }
+
+ throw new("Could not find connection type. Tried Microsoft.Data.SqlClient.SqlConnection and Npgsql.NpgsqlTransaction");
+
+ #endregion
}
internal static async Task HandleRequest(HttpContext context, ILogger logger, Func? suffix, Func> getTimeStamp, Func? shouldExecute, LogLevel level)