ASP.NET 要求でエンティティ マネージャーを使用するための現在のアドバイスは、AuthorizedThreadID
プロパティをNULL
(参照1および2 ) に設定することです。それは機能しますが、非常に重要な「セーフティネット」を無効にしているようです. 私は Entity Manager をスレッドセーフな方法で使用するために非常に努力していますが、間違った場合に備えてセーフティネットを用意しておくと便利ですNULL
....
ASP.NET の世界では、まだ大まかに 1 つの実行スレッドがあります。非同期作業を行っているときに実際のスレッドが変わる可能性があるだけです。いくつかの可能な解決策を考えることができます:
- この
EntityManager.SafeThreadingCheck()
メソッドは、ASP.NET 要求をサポートするために、ある種の特別な魔法を行います。IdeaBlade がこれを行いたくない可能性があることは理解できます...これが 2 番目のオプションにつながります... EntityManager
SafeThreadingCheck()
エンティティマネージャがまだリクエストスレッド上に「論理的に」あることを確認するための特別な魔法を実装できる独自のバージョンを提供するためのいくつかの拡張ポイントを提供します。ここで奇妙なことをしなければならないかもしれませんが、それほど複雑になるとは思いません。FancySafeThreadingCheck()
独自のメソッドをいつ呼び出す必要があるかを検出するために、他の拡張ポイントを使用しようとしています。これには、必要なすべての場所に接続しようとする必要があるという欠点がありますが、既存のSafeThreadingCheck()
メソッドは、必要なすべての場所から正確に最適なタイミングで (おそらく) 既に呼び出されています。
これが最優先の機能要求ではないことは理解できますが、それほど難しくないようにも思われます (少なくともオプション #2 の場合)。それとも、もっと良いかもしれない他の回避策がいくつかありますか? 私の最終目標は、この安全チェックをオフにしないことです...私はそこに到達するためのオプションを受け入れています。