DbContext.SaveChanges() から生成された SQL をログに記録する方法
Entity Framework (EF) では、生成された SQL ステートメントを簡単にログに記録できます。 DbContext.SaveChanges() メソッドによって。方法は次のとおりです:
Database.Log プロパティの使用:
EF 6.0 以降では、Database クラスに Action
context.Database.Log = Console.WriteLine;
インターセプターの使用:
より高度な機能が必要な場合ロギング機能がある場合は、インターセプターを使用できます。インターセプターは、DbInterceptor を継承し、そのさまざまなメソッドをオーバーライドするクラスです。このようなメソッドの 1 つが 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")));
以上がEntity Framework の DbContext.SaveChanges() によって生成された SQL ステートメントをログに記録する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。