1
我試圖攔截並記錄所有SQL
命令到數據庫。我還需要參數和它們的值。但是command.Parameters
沒有IEnumerable
。我可以去for-statement
,但有點感覺像一個回來。在DbCommand中遍歷參數
public override void ScalarExecuted(DbCommand command, DbCommandInterceptionContext<object> interceptionContext)
{
_stopwatch.Stop();
if (interceptionContext.Exception != null)
{
_logger.Error(interceptionContext.Exception, "Error executing command: {0}", command.CommandText);
string param = string.Empty;
if (command.Parameters.Count > 0)
{
foreach (var t in command.Parameters)
{
param += t....
}
}
Log log = new Log()
{
Date = DateTime.UtcNow,
LogLevel = LogLevel.Error,
Message = command.CommandText + "\r\n " + param.
};
}
else
_logger.TraceApi("SQL Database", "CommandInterceptor.ScalarExecuted", _stopwatch.Elapsed, "Command: {0}: ", command.CommandText);
base.ScalarExecuted(command, interceptionContext);
}
我需要建立一個string
(我知道我應該在string
代替使用StringBuilder
爲param
,但對這個問題的緣故,要保持它的簡單),這樣我可以把它傳遞給的Message
財產Log
。
此代碼稍作調整,取自this博客。
你爲什麼不使用EF 6的內置日誌功能?它將傳遞所有SQL語句及其參數名稱/值。 http://msdn.microsoft.com/en-us/library/dn469464.aspx –
蘭德,這正是我正在使用的,但你粘貼的鏈接使用NLog的第三方庫。我粘貼的鏈接不使用第三方庫。這兩個博客都是關於攔截'sql'命令的。 – Quoter