EF4MVCソリューションでパフォーマンスの問題が発生しています。データベースへのすべての接続の前にArithAbortがオフに設定されるまで追跡することができました。現在、強制的に「オン」のままにしようとしています。
私たちは見てきました: 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関数に、ストアドプロシージャ呼び出しで正しく機能させるため。