Dapper.Contrib 和 MiniProfiler(用于 MySql)集成问题

我正在尝试使用 MiniProfiler.Integrations.MySql 和 Dapper.Contrib 扩展来分析发送到 MySql 服务器的 sql 查询。我正在使用我自己的 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, 产生与 MySQL 不兼容的 SQLServer 语法:


 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


狐的传说
浏览 380回答 2
2回答

明月笑刀无情

作为一种解决方法,在当前版本中,您可以像这样覆盖 Dapper.Contrib 中基于类型的名称解析:SqlMapperExtensions.GetDatabaseType = conn => "MySqlConnection";这将覆盖默认的connection.GetType()基于名称的行为。尽管如此,这并不是很棒,我会看看我们是否可以在下一个 Dapper 版本中改进它。

守着星空守着你

看起来我已经找到了Insert()和InsertAsync()方法的解决方法,他们接受 ISqlAdapter 作为一个可选参数,这似乎解决了这个问题(但我仍然不能对Update()/使用这种方法UpdateAsync())。这是因为当您想使用MiniProfilerwithMySQL并且Dapper.Contrib需要包装MySqlConnection导致Dapper.Contrib使用默认值 (wrong) 时ISqlAdapter。
打开App,查看更多内容
随时随地看视频慕课网APP