在MVC Web应用程序中使用context.Database.Log

mar*_*ith 8 logging entity-framework asp.net-mvc-4

这里使用指南,我正在尝试记录我的MVC Web应用程序生成的SQL.

该指南使用该行:

context.Database.Log = Console.Write;
Run Code Online (Sandbox Code Playgroud)

这显然不适用于Web应用程序.该指南描述了Log属性:

对于采用字符串的任何方法,可以将DbContext.Database.Log属性设置为委托.

这是我不明白的,代表们只是让我困惑.我该如何使用这个EF6功能?

Ric*_*ard 21

使用委托允许您编写任何带字符串的函数.作为一个非常简单的文件记录,您可以执行以下操作:

context.Database.Log = message => File.AppendText("C:\\mylog.txt").WriteLine(message);
Run Code Online (Sandbox Code Playgroud)

在Web环境中,您可能希望使用Trace来记录此信息:

context.Database.Log = message => Trace.WriteLine(message);
Run Code Online (Sandbox Code Playgroud)

您可以在匿名函数MSDN页面上看到更多使用委托的示例.

  • Debug.WriteLine(message)也可以 (2认同)

Sta*_*ked 5

要将日志写入文件,请尝试以下操作:

using (var context = new MyDbContext())
{
    var logFile = new StreamWriter("C:\\temp\\log.txt");
    context.Database.Log = logFile.Write;

    // Execute your queries here
    // ....

    logFile.Close();
}
Run Code Online (Sandbox Code Playgroud)