Проблемы интеграции Dapper.Contrib и MiniProfiler (для MySql) - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь использовать 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 ]

0 голосов
/ 12 июня 2018

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

SqlMapperExtensions.GetDatabaseType = conn => "MySqlConnection";

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

0 голосов
/ 29 мая 2018

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

...