在EF4中控制ArithAbort

问题描述

| EF4 MVC解决方案存在一些性能问题。我们已经能够追踪到ArithAbort在与数据库的所有连接之前被设置为关闭状态,现在我们正试图迫使它保持为“ ON”状态。 我们已经看过: 如何控制Linq向sql发出的“ SET”语句 但是,似乎EF4会在每次查询之前重置连接,因此无法正常工作。 到目前为止,我们已经尝试过在给定查询之前“将ArithAbort设置为”,但没有成功。我们还尝试了很长一段路,并在我们设置它的地方建立了新的连接,但是仍然没有运气。 因此,有人对我们如何在对数据库进行任何linq查询之前如何进行设置进行了了解吗? 不能更改数据库设置。 编辑: 根据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 /在实体框架中跟踪和缓存实体框架中的msdn-code-gallery.aspx 现在,我承认这更多的是线索,而不是答案-但也许您可以在此时插入相关的集合?