【问题标题】:How do I disable interceptors when using them in Entity Framework在实体框架中使用拦截器时如何禁用它们
【发布时间】:2015-05-03 02:46:04
【问题描述】:

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

我从这篇文章开始: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>

【问题讨论】:

    标签: c# entity-framework web-config entity-framework-6 webdeploy


    【解决方案1】:

    出于您的目的,您不需要编写拦截器。您可以在c#代码中进行如下设置:

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

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

    【讨论】:

      【解决方案2】:

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

      另一个选择是开始使用拦截器并使用 DBInterceptors 类在代码中设置它们。然后我会使用 C# 指令来确保在调试模式下不调用代码。更多关于 DBInterceptors 的信息在这里Logging and Intercepting Database Operations

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-04-16
        • 2013-05-07
        • 1970-01-01
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        • 2020-03-17
        相关资源
        最近更新 更多