Проблемы интеграции Dapper.Contrib и MiniProfiler (для MySql)

Я пытаюсь использовать MiniProfiler.Integrations.MySql вместе с расширениями Dapper.Contrib для профилирования запросов sql, отправленных на сервер MySql. Я использую свою собственную ConnectionFactory:

public IDbConnection GetConnection()
{
    var connection = (DbConnection) new MySqlConnection(_connectionString);
    return new ProfiledDbConnection(connection, CustomDbProfiler.Current);
}

Dapper.Contrib позволяет вставлять новые записи так же просто, как

public async Task AddAsync(TEntity sample)
{
    using (var connection = _connectionFactory.GetConnection())
    {
        await connection.InsertAsync(sample);
    }
}

Но ProfiledDbConnection интерпретируется как SQLConnectionсоздавая синтаксис SQLServer, который несовместим с MySQL:

 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[Id], [CreatedAt], [AndSoOn]' at line 1

Нужны ваши советы о том, как решить проблему и заставить MiniProfiler работать.

Я использую (все из Nuget):

Dapper: 1,50,5
Dapper.Contrib: 1.50.5
MiniProfiler: 3.2.0
MiniProfiler.Integrations.MySql: 1.0.1

2 ответа

Как обходной путь, в текущей версии вы можете переопределить разрешение имен на основе типов в Dapper.Contrib следующим образом:

SqlMapperExtensions.GetDatabaseType = conn => "MySqlConnection";

Это заменит значение по умолчанию connection.GetType()поведение на основе имени. Тем не менее, это не удивительно, и я посмотрю, сможем ли мы улучшить это в следующем выпуске Dapper.

Похоже, я нашел обходной путь для Insert() а также InsertAsync() методы, они принимают ISqlAdapter в качестве необязательного параметра, который, кажется, решает проблему (но все же я не могу использовать этот подход для Update()/UpdateAsync()). Это связано с тем, что когда вы хотите использовать MiniProfiler с MySQL а также Dapper.Contrib вам нужно обернуть MySqlConnection что приводит к Dapper.Contrib использование по умолчанию (неправильно) ISqlAdapter,

Другие вопросы по тегам