如何记录从 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中文网其他相关文章!