我需要在我的S#arp应用程序中流畅配置nhibernate,以便我可以为多租户应用程序中的每个租户使用自定义的NHibernate.Search目录。
然而,我已经搜索了几个小时寻找解决方案,但似乎无法找到任何有用的电流。
谢谢, 保罗
答案 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);
}