ここに質問があります。コードの一部のみを共有するContextを作成する方法はありますか。どう説明したらいいのかわからないので、例を出します。
私が持っているとしましょう:
using(Context ctx = new Context())
{
ctx.Set("abc","abc");
method1();
method2();
}
および (方法 2 と同じ) :
public void method1()
{
Context ctx = Context.Instance();
string abc = ctx.Get("abc");
}
目標はContext.Instance()
、メソッド内の が using で作成されたオブジェクトを返すことですが、スレッド セーフのままにしておく必要があります。つまり、呼び出しが using の外から、または別の using の中で同時に行われた場合、using に従ってコンテキストが返されるということです。Context.Instante()
存在しない場合は新しいものを返しContext
ます(またはnull、後で適応します。それは重要ではありません)。
これは古典的な方法ではないことはわかっていますが、呼び出しごとにコンテキストを渡す必要はありません。real メソッドには多数の subs メソッドがあり、lasts だけがそれを必要としますが、最初から共通である必要があります。
目標は、すべての (そして唯一の) サブメソッドに共有される 1 つのトランザクションを作成することですが、最上位のメソッドは EF クラスにアクセスできません。私が持っている唯一の解決策は、セッションを使用してEFコンテキストを保存するか、セッションがないためバッチの静的に使用することです。それが私の目標ですが、問題はもっと一般的です。
質問をすることを躊躇しないでください。どのタグが追加されるのかよくわからないので、タグを追加します。
ありがとう !
編集
私は十分に明確ではなかったかもしれません。シングルトンでは不十分です。静的はすべてのインスタンス間で共有されます。using への 2 つの呼び出しが 2 人の異なるユーザーによって同時に行われた場合、Context はそれらに対して同じになりますが、私はそれらを異なるものにしたいと考えています。
理想的には、次のようなことを許可したいと思います:
using(Context ctx = new Context())
{
ctx.Set("abc","abc");
method1();
using(Context ctx = new Context())
{
ctx.Set("abc","def");
method2();
}
method1();
}
しかし、私はあまりにも多くを求めていると思います。