Entity Framework 6でデータベース操作のログ記録機能を追加


EntityFramework 6より、データベース・プロバイダがSystem.Data.Comon.DbProviderServicesから継承されなくなり、System.Data.Entity.Core.Comon.DbProviderServicesから継承されるようになったため、以前のように DbProviderFactories.GetFactoryClasses()メソッドは、プロバイダのDataTableを取得した後、反射を使用して自分が実装したプロバイダに変更してログを記録する機能を果たすが、EF 6の DbContextクラスは System.Data.Entity.Databaseオブジェクトを返すDatabaseプロパティ ログ属性は、以下のように定義されています.
public Action Log
{
    get
    {
        return this._internalContext.Log;
    }
    set
    {
        this._internalContext.Log = value;
    }
}

したがって、この属性にログ記録方法を指定することで、SQL操作ログを記録することができます.
public class MyDbContext: DbContext
{
    public MyDbContext() : base("ConnectionString")
    {
        Database.SetInitializer(null);
        base.Database.Log = Logger;
    }
}

その後、独自のLoggerメソッドを定義することができます.1回のデータベース操作を実行すると、EF 6は複数回このメソッドを呼び出します.そのうち、何回かは改行記号(r)を記録するだけで、残りはそれぞれ:実行されたSQL文、実行開始時間、実行結果、生成されたクエリーパラメータ(もしあれば)、それぞれ処理する必要があります.