如何解决在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
现在,我承认这更多的是线索,而不是答案-但也许您可以在此时插入相关的集合?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。