0

特定の主キーを持つオブジェクトがすでにDataContextにアタッチされているかどうかを確認し、アタッチされている場合はDataContextからエンティティを取得する必要があります。完全な信頼を持ってReflectionを必要としないこれを行う方法はありますか?

理想的には、GetCachedObject()を呼び出したいのですが、それを取得するにはリフレクションを使用する必要があり、ホストされた環境では機能しない完全信頼モードである必要があると確信しています。 。

私はここで箱の外で考えることにオープンです。また、生成されたLinqToSqlコードを完全に制御できるので、それも問題ではありません。DataContextクラスを書き直すことができます。IdentityManagerにアクセスしたり、IdentityManagerを独自の抽象化に置き換えたりする方法はありますか?どんなアイデアでも大歓迎です。

4

2 に答える 2

0

生成されたコードを制御する場合は、すべてのエンティティの ctor をスレッドごとの辞書に登録してみませんか。そうすれば、現在のスレッドのすべての既存のエンティティを取得できます。スレッドごとに 1 つのデータ コンテキストがある場合、ロードされた (必ずしもアタッチされているとは限らない) すべてのエンティティのリストが表示されます。

于 2011-09-14T19:37:24.963 に答える
0

考えられる「回避策」の 1 つ。私はそれを試していないので、それが機能するかどうかはわかりません... ...しかし、あなたが「箱から出して」と言ったので: DCに不良な接続または不良な接続文字列を割り当てるか、sqlconnectionを台無しにしますそれはすでに持っています。PK によるオブジェクトの次のクエリ。キャッシュにある場合、L2S が接続不良に気付かない可能性が高いため、オブジェクトを取得する必要があります。キャッシュにない場合、L2S は db ラウンドトリップを試行する必要があり、例外が発生します。

私が言ったように、汚れていてテストされていませんが、リフレクションを使用して ID マネージャー/変更トラッカーにアクセスすることを本当に避けたい場合は、試してみる価値があります。ただし、CPUサイクルを節約できるかどうかはわかりません... :)

于 2010-01-22T07:06:56.510 に答える