7

Fluent NHibernate + 複数のデータベースから質問が続きます(このリンクをたどる必要はありません。ここには十分な背景があるはずです)。

私の問題はこれです:

Fluent NHibernate を使用しています。私のアプリケーションは複数のデータベースを使用しています。各データベースには、それに対して登録 (マップ) された独自のエンティティがあります。その結果、複数のセッション ファクトリがあり、それぞれが単一の DB に関連し、それぞれが独自のマップされたエンティティのセットを「含んでいます」。

エンティティをロードするために、任意の登録済みエンティティ (任意の DB) に使用できるいくつかの標準的なロード メソッドを提供するジェネリック Factory クラスを作成しました。問題は次のとおりです。ロード メソッドは、処理に追われているエンティティ クラスの正しいセッション ファクトリを使用する必要があります。どのセッション ファクトリを使用する必要があるかを判断するにはどうすればよいですか? 私はすべてのセッション ファクトリを「手元に」持っています (そしてデータベース名でインデックス化されています)。ロードしようとしているエンティティの種類だけを知っていて、使用する適切なセッション ファクトリを選択する方法が必要です。

例えば:

public IBaseBusinessObject CreatePopulatedInstance(Type boType, Guid instanceKey)
{
  IBaseBusinessObject result = null;
  ISessionFactory sessionFactory = GetSessionFactory(boType);
  using (ISession session = sessionFactory.OpenSession())
  {
    using (session.BeginTransaction())
    {
      result = (IBaseBusinessObject)session.Get(boType, instanceKey);
    }
  }
  return result;
}

GetSessionFactory(boType) で何が必要ですか?

読んでくれてありがとう!

4

1 に答える 1

4

ISessionFactory.GetClassMetaData メソッドを調べることから始めます。

IClassMetadata metadata = sessionfactory.GetClassMetadata(boType); 

ISessionFactory インスタンスのリストを維持できる場合は、タイプ boType のメタデータを持つインスタンスが見つかるまで、それらを列挙することができます。

私はそれを使用したことがなく、参照も手元にありませんが、型を認識しない場合は null を返すか、例外を発生させることを期待しています。エラーなしでメタデータの値を取得した場合、それがセッション ファクトリです。

幸運を

ニール。

于 2010-04-23T13:04:31.477 に答える