1

ASP.NET 要求でエンティティ マネージャーを使用するための現在のアドバイスは、AuthorizedThreadIDプロパティをNULL(参照1および2 ) に設定することです。それは機能しますが、非常に重要な「セーフティネット」を無効にしているようです. 私は Entity Manager をスレッドセーフな方法で使用するために非常に努力していますが、間違った場合に備えてセーフティネットを用意しておくと便利ですNULL....

ASP.NET の世界では、まだ大まかに 1 つの実行スレッドがあります。非同期作業を行っているときに実際のスレッドが変わる可能性があるだけです。いくつかの可能な解決策を考えることができます:

  1. このEntityManager.SafeThreadingCheck()メソッドは、ASP.NET 要求をサポートするために、ある種の特別な魔法を行います。IdeaBlade がこれを行いたくない可能性があることは理解できます...これが 2 番目のオプションにつながります...
  2. EntityManagerSafeThreadingCheck()エンティティマネージャがまだリクエストスレッド上に「論理的に」あることを確認するための特別な魔法を実装できる独自のバージョンを提供するためのいくつかの拡張ポイントを提供します。ここで奇妙なことをしなければならないかもしれませんが、それほど複雑になるとは思いません。
  3. FancySafeThreadingCheck()独自のメソッドをいつ呼び出す必要があるかを検出するために、他の拡張ポイントを使用しようとしています。これには、必要なすべての場所に接続しようとする必要があるという欠点がありますが、既存のSafeThreadingCheck()メソッドは、必要なすべての場所から正確に最適なタイミングで (おそらく) 既に呼び出されています。

これが最優先の機能要求ではないことは理解できますが、それほど難しくないようにも思われます (少なくともオプション #2 の場合)。それとも、もっと良いかもしれない他の回避策がいくつかありますか? 私の最終目標は、この安全チェックをオフにしないことです...私はそこに到達するためのオプションを受け入れています。

4

1 に答える 1

1

DevForce 7.2.4 には、カスタム承認済みスレッド ID ロジックを提供するために EntityManager にデリゲートを設定する機能が含まれます。

于 2014-07-02T21:41:54.517 に答える