4

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関数に、ストアドプロシージャ呼び出しで正しく機能させるため。

4

1 に答える 1

4

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

今、私はこれが答えというよりも手がかりであることを認めます-しかし、おそらくこの時点で関連するセットを挿入することができますか?

于 2011-06-15T11:24:50.597 に答える