自己制作的一個(gè)基于Entity Framework Core 的數(shù)據(jù)庫(kù)操作攔截器,可以打印數(shù)據(jù)庫(kù)執(zhí)行sql,方便開(kāi)發(fā)調(diào)試,代碼如下:
/// <summary> /// EF Core 的數(shù)據(jù)庫(kù)操作攔截器,用于在數(shù)據(jù)庫(kù)操作過(guò)程中進(jìn)行日志記錄和監(jiān)視。 /// </summary> /// <remarks> /// 作者:我只吃飯不洗碗 /// 創(chuàng)建日期:2024年1月29日 /// </remarks> public class LoggingInterceptor : DbCommandInterceptor { /// <summary> /// 在執(zhí)行查詢命令之前攔截并輸出日志。 /// </summary> /// <param name="command">要執(zhí)行的查詢命令。</param> /// <param name="eventData">命令事件數(shù)據(jù)。</param> /// <param name="result">攔截結(jié)果。</param> /// <returns>攔截結(jié)果。</returns> public override InterceptionResult<DbDataReader> ReaderExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<DbDataReader> result) { var fullCommandText = command.CommandText; foreach (DbParameter param in command.Parameters) { var paramValue = param.Value is string ? $"'{param.Value}'" : param.Value.ToString(); fullCommandText = fullCommandText.Replace(param.ParameterName, paramValue); } Console.WriteLine($"Executing query: {fullCommandText}"); return base.ReaderExecuting(command, eventData, result); } /// <summary> /// 在執(zhí)行非查詢命令之前攔截并輸出日志。 /// </summary> /// <param name="command">要執(zhí)行的非查詢命令。</param> /// <param name="eventData">命令事件數(shù)據(jù)。</param> /// <param name="result">攔截結(jié)果。</param> /// <returns>攔截結(jié)果。</returns> public override InterceptionResult<int> NonQueryExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<int> result) { var fullCommandText = command.CommandText; foreach (DbParameter param in command.Parameters) { var paramValue = param.Value is string ? $"'{param.Value}'" : param.Value.ToString(); fullCommandText = fullCommandText.Replace(param.ParameterName, paramValue); } Console.WriteLine($"Executing non-query command: {fullCommandText}"); return base.NonQueryExecuting(command, eventData, result); } /// <summary> /// 在執(zhí)行標(biāo)量查詢命令之前攔截并輸出日志。 /// </summary> /// <param name="command">要執(zhí)行的標(biāo)量查詢命令。</param> /// <param name="eventData">命令事件數(shù)據(jù)。</param> /// <param name="result">攔截結(jié)果。</param> /// <returns>攔截結(jié)果。</returns> public override InterceptionResult<object> ScalarExecuting(DbCommand command, CommandEventData eventData, InterceptionResult<object> result) { var fullCommandText = command.CommandText; foreach (DbParameter param in command.Parameters) { var paramValue = param.Value is string ? $"'{param.Value}'" : param.Value.ToString(); fullCommandText = fullCommandText.Replace(param.ParameterName, paramValue); } Console.WriteLine($"Executing scalar query: {fullCommandText}"); return base.ScalarExecuting(command, eventData, result); } }
運(yùn)行結(jié)果如下:
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-836394.html
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836394.html
到了這里,關(guān)于.Net Core Entity Framework Core 的基礎(chǔ)封裝 -數(shù)據(jù)庫(kù)操作攔截器的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!