Аналогично ответу на вопрос https://stackoverflow.com/a/42932812/1321510 нам нужно выполнить необработанный SQL-запрос.Для запроса у нас нет контекстной модели БД (поэтому любые ответы .FromSql
не будут работать для нас).Однако нам нужно выполнить его в рамках существующей транзакции (созданной с помощью context.Database.BeginTransaction()
).Все решения, найденные в SO, не работают с существующими транзакциями.
Пример:
var connection = context.Database.GetDbConnection();
using (var command = connection.CreateCommand())
{
command.CommandText = sql;
command.Transaction = context.Database.CurrentTransaction.GetDbTransaction();
var executeReader = command.ExecuteReader();
var values = new object[executeReader.FieldCount];
if (!executeReader.Read())
{
return values;
}
executeReader.GetValues(values);
return values;
}
}
При фиксации транзакции выдается System.InvalidOperationException: 'This MySqlConnection is already in use. See https://fl.vu/mysql-conn-reuse'
.Предоставленная ссылка в исключении не выглядит вообще полезной, поскольку мы не используем асинхронное соединение и не используем соединение во время чтения из него.
Мы используем Pomelo.EntityFrameworkCore.MySql
в качестве соединителя базы данных.