NHibernate - Почему соединение необходимо для создания фабрики, если соединение можно передать конструктору сеанса? - PullRequest
1 голос
/ 02 ноября 2009

Я новичок в NHibernate и пытаюсь использовать его для подключения к DB2. После проб и ошибок и исследований, а также проб и ошибок и исследований я наконец-то дошел до ошибки, на которую не могу найти ответ.

Сообщение об ошибке гласит: «Пользователь должен предоставить соединение ADO.NET - NHibernate не создает его.»

Эта ошибка не очень полезна. Означает ли это, что мне нужно 1) поместить строку подключения в мой файл конфигурации или 2) мне нужно передать соединение на завод? Если 1 верно, это обязательно? Если это так, то почему мы получили возможность передавать объект соединения в сеанс, что я и хочу сделать?

Если 2) верно, как передать объект подключения на фабрику?

Заранее спасибо. Ниже приведены мои фрагменты кода, которые могут быть полезны:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
    </configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        <property name="dialect">NHibernate.Dialect.DB2400Dialect</property>
        <property name="proxyfactory.factory_class">NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle</property>
    </session-factory>
</hibernate-configuration>  
</configuration>

try
{               
    Configuration cfg = new Configuration();  

    cfg.AddInputStream(NHibernate.Mapping.Attributes.HbmSerializer.Default.Serialize(persistentClass));
    SessionFactory = cfg.Configure().BuildSessionFactory(); //HERE I GET THE EXCEPTION
}
catch (Exception ex)
{
    throw new Exception("NHibernate initialization failed", ex);
}

Ответы [ 2 ]

1 голос
/ 02 ноября 2009

Вам нужна фабрика сессий для конфигурации, такой как соединения, какое отображение вы используете, какие кэши вы используете, какой диалект SQL и т. Д. Не только соединение, поэтому передача соединения в качестве аргумента конструктора, вероятно, даст Вы еще одно бесполезное исключение. Вы должны настроить соединение в вашей конфигурации.

0 голосов
/ 03 ноября 2009

Если вы посмотрите документацию , вы сможете увидеть, как программно создать фабрику сеансов. В качестве альтернативы вы можете использовать fluentNhibernate, чтобы избежать этого файла конфигурации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...