Архитектура S # arp 1.9 + Свободно. Настройка () NHiberbante - PullRequest
0 голосов
/ 17 января 2011

Мне необходимо свободно настроить nhibernate в моем приложении S # arp, чтобы я мог использовать пользовательский каталог NHibernate.Search для каждого из моих клиентов в многопользовательском приложении.

Тем не менее, я часами гуглял в поисках решения, но, похоже, не могу найти ничего текущего, что работает.

Спасибо, Пол

1 Ответ

0 голосов
/ 17 января 2011

Я сам не пробовал, но 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); 
} 
...