在 Entity Framework 中使用拦截器时如何禁用它们

How do I disable interceptors when using them in Entity Framework

我使用的是Entity Framework6.1.3,刚刚实现了一个拦截器,以便在本地开发时可以查看生成的SQL。当我将站点发布到 LIVE 环境时,禁用此拦截器的正确方法是什么?我目前在发布时通过 Web 部署使用 Web Config Transform,我只是想确保该站点没有尝试写入不存在的文件。

我是从这篇文章开始的:https://msdn.microsoft.com/en-us/data/jj556606.aspx#Interceptors

这是我的配置部分:

   <interceptors>
    <interceptor type="System.Data.Entity.Infrastructure.Interception.DatabaseLogger, EntityFramework">
      <parameters>
        <parameter value="C:\Temp\LogOutput.txt"/>
        <parameter value="true" type="System.Boolean"/>
      </parameters>
    </interceptor>

为了解决您的场景,我会做您已经在做的事情,并使用配置文件转换来确保该部分不会在实时环境中结束。

另一种选择是开始使用拦截器并使用 DBInterceptors class 在代码中设置它们。然后我会使用 C# 指令来确保在 DEBUG 模式下不会调用代码。有关 DBInterceptors 的更多信息,请点击此处 Logging and Intercepting Database Operations

不过我仍然会使用第一个选项。

为了您的目的,您不需要编写拦截器。您可以在 C# 代码中进行以下设置:

#if DEBUG
    context.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);
#endif

在此之后,当您调试所有生成的 sql 时,将在输出中列出。您可以轻松修改它以将其也列到文件中。