1

次のような状況があります。最近発生した負荷の問題を最適化するために、いくつかの一時テーブルを作成する必要があります。LINQ to SQLは、DBMLにマップされていない限り、一時テーブルではうまく機能しないようです。正直なところ、LINQtoSQLでスコープがどのように機能するかはまだわかりません。それを念頭に置いて、DBML上のすべての一時テーブルを定義しました。

しかし、いつものように、物事はそれほど簡単ではありません。ユーザーがシステムにログオンしたときに定義されるため、コンパイル時に(linqが必要とする)一時テーブルの名前を定義できません。さらに追加するには、これらの動的一時テーブルをいくつか使用するため、すべてをDBMLにマップする方法はありません。

を介して一時テーブルを作成しようとしたときexecuteCommand、その結果を選択して強い型()にキャストしますTempTableDefinition。ただし、この新しく作成された一時テーブルに値を挿入しようとすると、「無効なオブジェクト名#NewTempTable」というSQLExceptionが発生しました(これは、テーブルの作成に使用した名前と同じです)。

すべての一時テーブルを作成し、そのプロパティを強い型付きオブジェクトにマップするには、純粋な古いプレーンADO.NETを使用する必要があるようです(このアプローチをお勧めします)。ADO.NETとLINQを混在させたくないのは、それが悪いアイデアだと読んだだけだからです。さらに、私はADO.NETの方法よりも強い型のオブジェクトのlinqアプローチを好みます。

履歴書: では、linq to sqlが機能する動的な一時テーブルを作成することは可能ですか?コンパイル時に名前を定義することはできず、実行時にのみ定義できます。ヒントをいただければ幸いです。

4

2 に答える 2

1

問題は、L2Sがデフォルトで各論理要求の接続を開いたり閉じたりすることであるように思われます。それはあなたの一時的なテーブルを殺します。

接続を手動で開く(そしてもちろん閉じる)かTransactionScope、L2Sと統合して接続を開いたままにするですべてをラップします。

于 2012-12-07T21:36:15.183 に答える
0

負荷の問題を最適化する

Linq-2-sqlとbatch/bulkはとにかく一緒に動作しません。すべての挿入/更新/削除は、単一のステートメントになります(OK、1つのトランザクションですが、それでも)。筋金入りのパフォーマンスを得るには、Linq-2-sqlを避け、データを取得したら、強い型付けなどのすべての利点を備えたLinqを使用します。

于 2012-12-07T19:34:57.530 に答える