Entity Framework Core ручной SQL-запрос в рамках существующей транзакции - PullRequest
0 голосов
/ 27 февраля 2019

Аналогично ответу на вопрос 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 в качестве соединителя базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...