2011-02-01 4 views
1

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

<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> 

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

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 class, или что Navtrak.Business.Schemas.CommonSchemas.Models.NavtrakOperations.Application class не украшен атрибутом [ActiveRecord].

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

Любые идеи?

+0

какую версию activerecord вы используете? –

+0

@Mauricio Scheffer - Я использую последнюю dll для .NET 4 (я думаю), поскольку я скачал их примерно неделю назад. – Justin

+0

@Justin - Могли бы вы обновить, чтобы показать окончательный синтаксис всего, что вы использовали? Я пытаюсь сделать то же самое, но не могу пройти мимо описанной вами ошибки. – Rake36

ответ

0

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

+0

Спасибо, это то, что я получаю для копирования/вставки с сайта ... – Justin

1

В моем случае - который был в такой же ситуации - я добавил это к способу 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; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^