Использование Microsoft MVC .NET 4.7.2.
Мой вопрос касается использования SqlTransaction в асинхронном методе, как показано ниже.
public async Task DeleteSomethingAsync(int id)
{
SqlTransaction sqlTransaction = null;
try
{
using (SqlConnection sqlConnection = new SqlConnection(_connectionString))
{
using (SqlCommand sqlCommand = sqlConnection.CreateCommand())
{
await sqlConnection.OpenAsync();
using (sqlTransaction = sqlConnection.BeginTransaction(IsolationLevel.ReadCommitted))
{
sqlCommand.Transaction = sqlTransaction;
sqlCommand.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = id });
sqlCommand.CommandText = @"DELETE FROM first_table "
+ @"WHERE (some_id = @Id)";
await sqlCommand.ExecuteNonQueryAsync();
sqlCommand.CommandText = @"DELETE FROM second_table "
+ @"WHERE (some_id = @Id) ";
await sqlCommand.ExecuteNonQueryAsync();
sqlTransaction.Commit();
}
}
}
}
catch
{
// Some error logging blah.
try
{
sqlTransaction?.Rollback();
}
catch
{
// Some error logging blah.
}
}
}
Кажется, что нет никакого sqlConnection.BeginTransaction Async .
Кажется, существует метод BeginTransactionAsync для .NET Core.
Там также из некоторых документов MS, кажется, это:
https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/asynchronous-programming
// Start a local transaction.
transaction = await Task.Run<SqlTransaction>(
() => connection.BeginTransaction("SampleTransaction")
);
Это кажется неуместным в IIS (может, я ошибаюсь?)
Как и в большинстве случаев с Microsoft, теперь информация повсюду.
Как правильно использовать транзакцию в асинхронном методе в 2018 году с использованием MVC и .NET 4.7.2.