如何記錄從DbContext.SaveChanges() 產生的SQL
在實體框架(EF) 中,您可以輕鬆記錄產生的SQL語句通過您的DbContext.SaveChanges() 方法。操作方法如下:
使用 Database.Log 屬性:
在 EF 6.0 及更高版本中,Database 類別有一個 Action
context.Database.Log = Console.WriteLine;
使用攔截器:
如果您需要更進階日誌功能,您可以使用攔截器。攔截器是一個繼承自DbInterceptor並重寫其各種方法的類別。其中一種方法是 OnNonQueryExecuted,每當執行非查詢語句(例如 SaveChanges())時都會呼叫該方法。
在 OnNonQueryExecuted 方法中,您可以存取已執行的 SQL 語句並將其記錄到檔案、資料庫或任何其他位置。
範例程式碼:
這是一個將SQL 語句記錄到檔案的攔截器範例:
public class SqlLoggerInterceptor : DbInterceptor { private readonly TextWriter _logWriter; public SqlLoggerInterceptor(TextWriter logWriter) { _logWriter = logWriter; } public override void OnNonQueryExecuted(DbCommand command, DbCommandInterceptionContext interceptionContext) { _logWriter.WriteLine(command.CommandText); } }
您可以像這樣註冊攔截器:
Database.SetInitializer<MyContext>(null); Database.AddInterceptor(new SqlLoggerInterceptor(File.AppendText("log.txt")));
以上是如何在實體框架中記錄 DbContext.SaveChanges() 產生的 SQL 語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!