sql-server-2008 – 在EF4中控制ArithAbort

我们的EF4 MVC解决方案存在一些性能问题.我们已经能够在所有与数据库的连接之前将其跟踪到ArithAbort设置为关闭,现在我们正试图强制它保持为“ON”. 我们看过: How do you control the “SET” statements emitted by Linq to SQL 但似乎EF4正在重置每个

我们的EF4 MVC解决方案存在一些性能问题.我们已经能够在所有与数据库的连接之前将其跟踪到ArithAbort设置为关闭,现在我们正试图强制它保持为“ON”.

我们看过:
How do you control the “SET” statements emitted by Linq to SQL

但似乎EF4正在重置每个查询之前的连接,所以这将无法正常工作.

到目前为止,我们已经尝试在给定查询之前“设置ArithAbort”,没有运气.我们也尝试了很长的路要走并在我们设置的地方建立新的连接,但仍然没有运气.

那么,任何人都有一个线索,我们如何在对数据库进行任何linq查询之前设置它?

无法更改数据库设置.

编辑:
Per Andiihs建议我尝试了包装器解决方案并在以下代码行中添加到EFCachingCommand类

protected override DbDataReader ExecuteDbDataReader(CommandBehavior behavior)
    {
        if (this.WrappedCommand.CommandType == System.Data.CommandType.Text)
        {
            this.WrappedCommand.CommandText = "set arithabort on; " + this.WrappedCommand.CommandText;
        }

这基本上确保任何Linq-sql调用都以正确的set语句为前缀.

我还必须补充:

DbFunctionCommandTree functionTree = commandTree as DbFunctionCommandTree;
    if (functionTree != null)
    {
        this.IsModification = true;
        return;
    }

到EFCachingCommandDefinition中的GetAffectedEntitySets函数,以使其与存储过程调用一起正常工作.

解决方法

EF提供了在实体连接和SQL.Data.Client之间插入环绕提供程序的功能 – 请参阅
http://code.msdn.microsoft.com/EFProviderWrappers和
http://blogs.msdn.com/b/jkowalski/archive/2009/06/11/tracing-and-caching-in-entity-framework-available-on-msdn-code-gallery.aspx

现在我承认这更像是一个线索而不是答案 – 但也许你可以在这一点上插入相关的集合?

关于作者: dawei

【声明】:石家庄站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

为您推荐