MVC 5プロジェクトでLINQでEF 6.0を使用しています。デバッグ/パフォーマンス測定のために、Entity Framework DbContextによって実行されたすべてのSQLクエリをログに記録します。
Java/Hibernateでは、プロパティhibernate.show_sql=true
を設定することで同等の動作を実現できます。 Entity Frameworkで同様の動作をすることは可能ですか?
データベース操作のログ記録とインターセプト MSDNの記事はあなたが探しているものです。
DbContext.Database.Log
プロパティは、文字列を取る任意のメソッドのデリゲートに設定できます。最も一般的には、TextWriterの「Write」メソッドに設定することにより、任意のTextWriter
で使用されます。現在のコンテキストによって生成されたすべてのSQLは、そのライターに記録されます。たとえば、次のコードはSQLをコンソールに記録します。
using (var context = new BlogContext())
{
context.Database.Log = Console.Write;
// Your code here...
}
この行を使用して、コンソールウィンドウではなく、「出力」ウィンドウにのみログを記録できます。これもデバッグモードでのみです。
public class YourContext : DbContext
{
public YourContext()
{
Database.Log = sql => Debug.Write(sql);
}
}
ロガーを備えた.NET Coreセットアップを持っている場合、EFは、デバッグ出力ウィンドウ、コンソール、ファイルなど、必要な出力にクエリを記録します。
アプリケーション設定で「情報」ログレベルを設定するだけです。たとえば、これにはデバッグ出力ウィンドウへのEFロギングがあります:
"Logging": {
"PathFormat": "Logs/log-{Date}.txt",
"IncludeScopes": false,
"Debug": {
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
}
},
"Console": {
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Warning"
}
},
"File": {
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Warning"
}
},
"LogLevel": {
"Default": "Information",
"System": "Warning",
"Microsoft": "Warning"
}
}