S#arp Architecture 1.9 + Fluently.Configure()NHiberbante

时间:2011-01-17 15:22:30

标签: nhibernate fluent-nhibernate s#arp-architecture

我需要在我的S#arp应用程序中流畅配置nhibernate,以便我可以为多租户应用程序中的每个租户使用自定义的NHibernate.Search目录。

然而,我已经搜索了几个小时寻找解决方案,但似乎无法找到任何有用的电流。

谢谢, 保罗

1 个答案:

答案 0 :(得分:0)

我自己没有尝试过这个,但AddConfiguration接受了cfgProperties的字典,我想你可以将租户特定的hibernate.search.default.indexBase值传递给。

我看了一下,如果你尝试使用CfgHelper.LoadConfiguration(),如上所述添加密钥将导致问题,因为它将返回null。

但您可以使用工厂密钥将NHSearch配置为为每个工厂使用不同的目录:

  <nhs-configuration xmlns="urn:nhs-configuration-1.0">
    <search-factory sessionFactoryName="YOUR_TENANT1_FACTORY_KEY">
      <property name="hibernate.search.default.indexBase">~\IndexTenant1</property>
    </search-factory>
    <search-factory sessionFactoryName="YOUR_TENANT2_FACTORY_KEY">
      <property name="hibernate.search.default.indexBase">~\Tenant2</property>
    </search-factory>   
  </nhs-configuration>

如果您按照说明操作 http://wiki.sharparchitecture.net/Default.aspx?Page=NHibSearch 您需要将方法GetIndexDirectory更改为

  private string GetIndexDirectory() { 
    INHSConfigCollection nhsConfigCollection = CfgHelper.LoadConfiguration(); 
    string factoryKey = SessionFactoryAttribute.GetKeyFrom(this); // Change this with however you get the factory key for your tenants,
    string property = nhsConfigCollection.GetConfiguration(factoryKey).Properties["hibernate.search.default.indexBase"];
    var fi = new FileInfo(property); 
    return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, fi.Name); 
}