在 DB-First Approach 的调试窗口中记录所有实体框架查询

Suy*_*pta 5 linq logging entity-framework

我想在调试窗口中记录实体框架查询。我可以使用以下行来做到这一点:

myContext.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
Run Code Online (Sandbox Code Playgroud)

但是我如何在不同的函数和不同的文件中为我的所有查询做到这一点?

我必须到处写这一行吗?

或者有没有办法通过编写特定的代码行来在一个地方记录每个查询来做到这一点。

按照建议,我已经在上下文的构造函数中编写了代码,但它不起作用。

public partial class EkartEntities : DbContext
{
    public EkartEntities() : base("name=EkartEntities")
    {
        Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?

此外,它与如何全局进行 EF 日志 sql 查询不重复 因为帖子包含代码优先方法的答案,我们可以简单地修改我们的构造函数。

Iva*_*oev 3

您可以通过将以下类添加到包含DbContext派生类的项目来安装全局记录器:

class MyDbConfiguration : System.Data.Entity.DbConfiguration
{
    public MyDbConfiguration()
    {
        AddInterceptor(new System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter(
            s => System.Diagnostics.Debug.WriteLine(s)));
    }
}
Run Code Online (Sandbox Code Playgroud)

该类表示所谓的基于代码的配置,在这种特殊情况下,用于自动向包含该类的项目中的所有派生类型和实例指定DatabaseLogFormatter注册。Action<string> DbContext