在 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 时,将在输出中列出。您可以轻松修改它以将其也列到文件中。
我使用的是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 时,将在输出中列出。您可以轻松修改它以将其也列到文件中。