複数のセッション ファクトリを使用して、UnitOfWork のコードをリファクタリングしています。私たちの UoW は、すべてのセッション ファクトリを反復処理してそれらを開き、コンテキストにバインドします。ここに問題があります。
public void InitializeSessions()
{
foreach (ISessionFactory sessionFactory in _sessionFactories)
{
if ( NHibernate.Context.CurrentSessionContext.HasBind(sessionFactory))
{
continue;
}
ISession session = sessionFactory.OpenSession();
NHibernate.Context.CurrentSessionContext.Bind(session);
session.BeginTransaction();
}
}
この UoW はユニバーサルである必要があります。つまり、WCF、Web、または単体テストで使用できます。したがって、WCF アプリの場合、nh 構成セッション コンテキストを "WcfOperationSessionContext" に設定します (Web など)。「ManagedWebSessionContext」。発生した問題は、クラス CurrentSessionContext の静的メソッドを使用できないことです。メソッド「Bind」は ISessionFactoryImplementor が「CurrentSessionContext」から継承する必要があるためです。いくつかの検索の後、例では nh 構成ファイルに設定されているこのコンテキストを直接呼び出すことがわかりましたが、インターネットからの他の実装では厳密に「CurrentSessionContext」を使用しています。
これは実際にどのように行うべきですか?nh configで構成された「ICurrentSessionContext」のコンテキスト実装を直接呼び出す必要があるか、または常に「CurrentSessionContext」を使用する必要があるか(これは私が述べたように機能しません)?