マルチスレッド アプリケーションはスレッドごとに個別のセッションを使用する必要があるという多くの投稿を読みました。ロックがどのように機能するのか理解できないかもしれませんが、すべてのリポジトリ メソッドでセッションをロックすると、単一の静的セッション スレッド セーフにならないのでしょうか?
お気に入り:
public void SaveOrUpdate(T instance)
{
if (instance == null) return;
lock (_session)
using (ITransaction transaction = _session.BeginTransaction())
{
lock (instance)
{
_session.SaveOrUpdate(instance);
transaction.Commit();
}
}
}
編集:
私が書いているアプリケーションのコンテキスト/タイプを考慮してください:
マルチユーザーではなく、典型的なユーザー インタラクションではありませんが、財務データや注文の更新などのリモート イベントに反応し、それに基づいてタスクを実行し、保存する自律型ロボットです。断続的に、これにより 1 秒あたり最大 10 回の保存のクラスターが作成される可能性があります。通常、毎回保存する必要があるのは同じオブジェクト グラフです。また、起動時に、プログラムは完全なデータベースをエンティティ オブジェクト グラフにロードします。したがって、基本的には一度だけ読み取り、実行時に SaveOrUpdates を実行します。