我正在嘗試使用 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 關注
- 440 瀏覽
添加回答
舉報
0/150
提交
取消