Подключение к нескольким базам данных в Active Record - PullRequest
1 голос
/ 02 февраля 2011

Я пытаюсь подключиться к нескольким базам данных в активной записи замка (которая использует nhibernate.) Мой файл конфигурации выглядит следующим образом:

<configSections>
    <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <activerecord>
    <config type="Navtrak.Business.Schemas.CommonSchemas.Models.NavtrakOperations.NavtrakOperationsDatabase`1, CommonSchemas">
      <add key="hibernate.connection.connection_string" value="myconnstring" />
      <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
      <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
      <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    </config>
    <config type="Navtrak.Business.Schemas.CommonSchemas.Models.Errors.ErrorsDatabase`1, CommonSchemas">
      <add key="hibernate.connection.connection_string" value="Data Source=myconnstring" />
      <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
      <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
      <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
    </config>
  </activerecord>

А затем у меня есть базовый абстрактный класс для каждой базы данных, напримерthis:

public abstract class NavtrakOperationsDatabase<T> : ActiveRecordBase<T>
    {

    }

И тогда каждый класс наследует от этого.Затем я инициализирую активную запись следующим образом:

ActiveRecordStarter.Initialize(typeof(SimpleModel).Assembly, ActiveRecordSectionHandler.Instance);

, что дает мне ошибку:

Не удалось найти диалект в конфигурации

Если я изменю код активации на этот:

ActiveRecordStarter.Initialize(
                    ActiveRecordSectionHandler.Instance,
                    typeof(NavtrakOperationsDatabase<>),
                    typeof(ErrorsDatabase<>)
                );

Тогда я получу следующую ошибку:

Вы получили доступ к классу ActiveRecord, который не был должным образом инициализирован.Есть два возможных объяснения: что вызов ActiveRecordStarter.Initialize () не включает в себя класс Navtrak.Business.Schemas.CommonSchemas.Models.NavtrakOperations.Application или что класс Navtrak.Business.Schemas.CommonSchemas.Models.NavtrakOperations.Application.не имеет атрибута [ActiveRecord].

Я, очевидно, не хочу включать каждый класс в функцию Initialize.

Есть идеи?

Ответы [ 2 ]

1 голос
/ 08 сентября 2017

В моем случае - что было в той же ситуации - я добавил это к методу InitializeAR:

LoggerProvider.SetLoggersFactory(new NoLoggingLoggerFactory());

Это закончилось так:

lock (typeof(SessionManager))
{
    if (!initialized)
    {
        LoggerProvider.SetLoggersFactory(new NoLoggingLoggerFactory());                
        System.Reflection.Assembly bin = typeof(SimpleModel).Assembly;
        IConfigurationSource s = (IConfigurationSource)ConfigurationManager.GetSection("activerecord");
        ActiveRecordStarter.Initialize(bin, s);

    }
    initialized = true;
}
0 голосов
/ 02 февраля 2011

Отбросьте "спящий режим".префикс от всех ключей конфигурации.Этот префикс был использован в NHibernate 1.x

...