Wir portieren unsere Dapper-Anwendung auf .NET Core und wir haben ein Problem mit unserem Transaktionscode.Dapper, .NET Core und Transaktionen scheitern
Wir verwenden "Aktionen" stuff
public Action<IDbConnection> CreateAction(string statement, object values)
{
return (dbConnection) => dbConnection.Execute(statement, values);
}
auszuführen Und wir verwenden Methoden diese Aktionen mit
public void Execute(IEnumerable<Action<IDbConnection>> actions)
{
using (IDbConnection connection = OpenConnection())
using (IDbTransaction transaction = connection.BeginTransaction())
{
try
{
foreach (var action in actions)
{
action(transaction.Connection);
}
transaction.Commit();
}
catch
{
transaction.Rollback();
throw;
}
}
}
Dies funktioniert gut mit .NET Framework und Dapper 1.42, auszuführen aber es funktioniert nicht auf .NET Core mit Dapper 1.50.2.
System.InvalidOperationException: 'ExecuteNonQuery erfordert, dass der Befehl eine Transaktion ausführt, wenn die dem Befehl zugewiesene Verbindung in einer ausstehenden lokalen Transaktion ist. Die Transaction-Eigenschaft des Befehls wurde nicht initialisiert.
Wenn wir die Transaktion entfernen, funktioniert es auch gut.
Was muss geändert werden, damit es funktioniert?