我正在尝试使用 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 版本中改进它。
守着星空守着你
TA贡献1799条经验 获得超8个赞
看起来我已经找到了Insert()
和InsertAsync()
方法的解决方法,他们接受 ISqlAdapter 作为一个可选参数,这似乎解决了这个问题(但我仍然不能对Update()
/使用这种方法UpdateAsync()
)。这是因为当您想使用MiniProfiler
withMySQL
并且Dapper.Contrib
需要包装MySqlConnection
导致Dapper.Contrib
使用默认值 (wrong) 时ISqlAdapter
。
- 2 回答
- 0 关注
- 379 浏览
添加回答
举报
0/150
提交
取消