为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
狐的传说 2021-07-02 14:36:08
我正在尝试使用 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.5Dapper.Contrib:1.50.5 MiniProfiler:3.2.0 MiniProfiler.Integrations.MySql:1.0.1
查看完整描述

2 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

作为一种解决方法,在当前版本中,您可以像这样覆盖 Dapper.Contrib 中基于类型的名称解析:

SqlMapperExtensions.GetDatabaseType = conn => "MySqlConnection";

这将覆盖默认的connection.GetType()基于名称的行为。尽管如此,这并不是很棒,我会看看我们是否可以在下一个 Dapper 版本中改进它。


查看完整回答
反对 回复 2021-07-10
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

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


查看完整回答
反对 回复 2021-07-10
  • 2 回答
  • 0 关注
  • 379 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信