2

マルチセッション ファクトリ オブジェクトを使用して、Spring.NET/NHibernate に基づくアプリケーションを構築しました。

そして、すべての hbm ファイルを 1 つのアセンブリに入れています。

/Assembly/
....Database1
........abc.hbm.xml
....Database2
........xyz.hbm.xml

セッション ファクトリ オブジェクト定義の hbm ファイルを除外する方法はありますか。

このように(除外タグを見ましたか?):

<object id="Db1SessionFactory" type=DataAccess.HibernateLocalSessionFactoryObject, DataAccess">
<property name="MappingAssemblies">
    <list>
         <value>DataAccess</value>
         <exclude>xyz.hbm.xml</eclude>
    </list>
</property>

または...、他の解決策で私を助けることができますか?さらに、hbm ファイルを複数のアセンブリに分けたくありません。

4

1 に答える 1

0

「データベース 3」のマッピング ファイルを追加するときに、本番環境のすべての構成ファイルを変更する必要があるため、除外する方法は使用しません。より良い方法は、セッション ファクトリが必要とするマッピング (のディレクトリ)を具体的に含めることです。

そうは言っても、アセンブリと (たとえば) アセンブリの読み込み元の名前空間またはフォルダーを受け取る独自のSessionFactoryObject継承元を実装できます。カスタム構成で独自の構成LocalSessionFactoryObjectを作成する方法の例については、Benny Michielsen の FluentNHibernate の例を参照してくださいSessionFactoryObject

編集...次のようになります(テストされていません!)

public class LoadMappingsFromFolderInAssemblySessionFactoryObject
              : LocalSessionFactoryObject
{
    // inject with the name of the assembly to load
    public string MyMappingAssembly { get; set; }
    // inject with the path to the folder within the assembly
    public string MyFolder { get; set; }

    protected override void PostProcessConfiguration(Configuration config)
    {
        base.PostProcessConfiguration(config);
        // snip ... guard methods omitted
        Assembly asm = GetAssembly(MyMappingAssembly);
        IEnumerable<string> paths = GetResourcePaths(MyFolder, asm);
        config.AddResources(paths, asm);
    }
    // snip ...
}
于 2012-09-11T12:41:48.860 に答える