ホームページ > データベース > mysql チュートリアル > Entity Framework の DbContext.SaveChanges() によって生成された SQL ステートメントをログに記録する方法

Entity Framework の DbContext.SaveChanges() によって生成された SQL ステートメントをログに記録する方法

Patricia Arquette
リリース: 2025-01-04 16:23:41
オリジナル
753 人が閲覧しました

How to Log SQL Statements Generated by DbContext.SaveChanges() in Entity Framework?

DbContext.SaveChanges() から生成された SQL をログに記録する方法

Entity Framework (EF) では、生成された SQL ステートメントを簡単にログに記録できます。 DbContext.SaveChanges() メソッドによって。方法は次のとおりです:

Database.Log プロパティの使用:

EF 6.0 以降では、Database クラスに Action があります。 Log というプロパティ。このプロパティをコンソールに書き込む関数に設定すると、生成された SQL ステートメントをログに記録できます。

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート