Skip to content

Commit decb0ab

Browse files
committed
NH-3807 - .netstandard version of SqlClient doesn't do batching.
Test for batching existence in SqlClientBatchingBatcherFactory.
1 parent fd5fad6 commit decb0ab

File tree

2 files changed

+17
-12
lines changed

2 files changed

+17
-12
lines changed

src/NHibernate.Driver.SqlClient/AdoNet/SqlClientBatchingBatcherFactory.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@ public class SqlClientBatchingBatcherFactory : IBatcherFactory
66
{
77
public virtual IBatcher CreateBatcher(ConnectionManager connectionManager, IInterceptor interceptor)
88
{
9-
return new SqlClientBatchingBatcher(connectionManager, interceptor);
9+
return SqlClientSqlCommandSet.HasBatchImplementation
10+
? (IBatcher) new SqlClientBatchingBatcher(connectionManager, interceptor)
11+
: (IBatcher) new NonBatchingBatcher(connectionManager, interceptor);
1012
}
1113
}
1214
}

src/NHibernate.Driver.SqlClient/AdoNet/SqlClientSqlCommandSet.cs

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,23 @@ public class SqlClientSqlCommandSet : IDisposable
3030

3131
static SqlClientSqlCommandSet()
3232
{
33-
var sysData = Assembly.Load("System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
33+
var sysData = typeof(System.Data.SqlClient.SqlCommand).Assembly;
3434
sqlCmdSetType = sysData.GetType("System.Data.SqlClient.SqlCommandSet");
35-
Debug.Assert(sqlCmdSetType != null, "Could not find SqlCommandSet!");
36-
37-
connectionSetter = DelegateHelper.BuildPropertySetter<SqlConnection>(sqlCmdSetType, "Connection");
38-
connectionGetter = DelegateHelper.BuildPropertyGetter<SqlConnection>(sqlCmdSetType, "Connection");
39-
transactionSetter = DelegateHelper.BuildPropertySetter<SqlTransaction>(sqlCmdSetType, "Transaction");
40-
commandTimeoutSetter = DelegateHelper.BuildPropertySetter<int>(sqlCmdSetType, "CommandTimeout");
41-
batchCommandGetter = DelegateHelper.BuildPropertyGetter<System.Data.SqlClient.SqlCommand>(sqlCmdSetType, "BatchCommand");
42-
doAppend = DelegateHelper.BuildAction<System.Data.SqlClient.SqlCommand>(sqlCmdSetType, "Append");
43-
doExecuteNonQuery = DelegateHelper.BuildFunc<int>(sqlCmdSetType, "ExecuteNonQuery");
44-
doDispose = DelegateHelper.BuildAction(sqlCmdSetType, "Dispose");
35+
if (sqlCmdSetType != null)
36+
{
37+
connectionSetter = DelegateHelper.BuildPropertySetter<SqlConnection>(sqlCmdSetType, "Connection");
38+
connectionGetter = DelegateHelper.BuildPropertyGetter<SqlConnection>(sqlCmdSetType, "Connection");
39+
transactionSetter = DelegateHelper.BuildPropertySetter<SqlTransaction>(sqlCmdSetType, "Transaction");
40+
commandTimeoutSetter = DelegateHelper.BuildPropertySetter<int>(sqlCmdSetType, "CommandTimeout");
41+
batchCommandGetter = DelegateHelper.BuildPropertyGetter<System.Data.SqlClient.SqlCommand>(sqlCmdSetType, "BatchCommand");
42+
doAppend = DelegateHelper.BuildAction<System.Data.SqlClient.SqlCommand>(sqlCmdSetType, "Append");
43+
doExecuteNonQuery = DelegateHelper.BuildFunc<int>(sqlCmdSetType, "ExecuteNonQuery");
44+
doDispose = DelegateHelper.BuildAction(sqlCmdSetType, "Dispose");
45+
}
4546
}
4647

48+
public static bool HasBatchImplementation => sqlCmdSetType != null;
49+
4750
public SqlClientSqlCommandSet()
4851
{
4952
instance = Activator.CreateInstance(sqlCmdSetType, true);

0 commit comments

Comments
 (0)