質問

デフォルトでは、SQL Connection Option ArithAbortはOLEDB接続用にオフになっています。これは、linq to SQLが使用していると想定しています。しかし、私はそれをオンにする必要があります。その理由は、私のDBにはいくつかのインデックス付きビューが含まれており、接続にARITHABORTが付いていない場合、インデックス付きビューの一部であるテーブルに対する挿入/更新/削除操作が含まれているためです。 with(noexpand)ヒントが使用されている場合、インデックス付きビュー自体に対して選択することも失敗します(インデックスビューのパフォーマンスの利点を取得するには、SQL Standard Editionで使用する必要があります)。

データコンテキストのどこかに指定できる場所はありますか?このオプションをオンにしたいですか?またはコードのどこかで私はそれをすることができますか?

私は不器用な回避策を管理しましたが、私はそれが好きではありません....私はすべての選択/挿入/更新/削除/削除操作のためにストアドプロシージャを作成する必要があります、そして、このProcの最初の実行セットArithabortをオンにして、別のprocを実行します実際の選択/挿入/更新/削除が含まれています。言い換えれば、最初のProcは2番目のProcの単なるラッパーです。セットArithabortをSelect/insert/update/deleteコードの上に置くだけでは機能しません。

役に立ちましたか?

解決

私がやったことは、自分の「ヘルパー」クラスに自分の方法を書くことで、dataContextを作成し、DataContextが必要なたびにこれを使用することでした。

      Dim conn As New SqlConnection(Config.GetConnectionString("SiteSqlServer"))
      Dim command As New SqlCommand("set arithabort on;", conn)
      command.Connection.Open()
      command.ExecuteNonQuery()
      Dim dc = New SiteDataContext(conn)

ここでのアイデアは、接続をパラメーターとして使用するDatacontextコンストラクターを使用することです。 SQLConnectionを作成して開き、「Arithabort ...」を実行してDCに渡します(クレジットはポスターになります ここ).

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top