NHibernate не может создать SessionFactory - PullRequest
1 голос
/ 09 января 2011

У меня проблемы с настройкой NHibernate, и я не совсем уверен, в чем именно проблема. Я пытаюсь сохранить объект домена в базе данных (Oracle 10g XE). Тем не менее, я получаю TypeInitializationException при попытке создать ISessionFactory. Вот как выглядит мой файл hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="MyProject.DataAccess">
        <property name="connection.driver_class">NHibernate.Driver.OracleClientDriver</property>
        <property name="connection.connection_string">
            User ID=myid;Password=mypassword;Data Source=localhost
        </property>
        <property name="show_sql">true</property>
        <property name="dialect">NHibernate.Dialect.OracleDialect</property>
        <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
        <mapping resource="MyProject/Domain/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

Я создал DAO, который буду использовать для сохранения объектов домена в базе данных. DAO использует класс HibernateUtil, который создает SessionFactory. Оба класса находятся в пространстве имен DataAccess вместе с конфигурацией Hibernate. Здесь происходит исключение. Вот этот класс:

public class HibernateUtil
{
    private static ISessionFactory SessionFactory = BuildSessionFactory();

    private static ISessionFactory BuildSessionFactory()
    {
        try
        {
            // This seems to be where the problem occurs
            return new Configuration().Configure().BuildSessionFactory();
        }
        catch (TypeInitializationException ex)
        {
            Console.WriteLine("Initial SessionFactory creation failed." + ex);
            throw new Exception("Unable to create SessionFactory.");
        }
    }

    public static ISessionFactory GetSessionFactory()
    {
        return SessionFactory;
    }
}

Пространство имен DataAccess ссылается на библиотеки DLL NHibernate. Это практически та же самая настройка, которую я использовал с Hibernate в Java, поэтому я не совсем уверен, что я делаю здесь неправильно. Есть идеи?

1009 ** * Редактировать 1010 ** * 1011

Самым внутренним исключением является следующее:

"Не удалось найти файл 'C: \ Users \ Tyler \ Documents \ Visual Studio 2010 \ Projects \ MyProject \ MyProject \ ConsoleApplication \ bin \ Debug \ hibernate.cfg.xml'."

ConsoleApplication содержит точку входа, в которой я создал объект User и пытаюсь сохранить его в моем DAO. Почему он ищет файл конфигурации там? Фактическое сохранение происходит в DAO, который находится в DataAccess. Кроме того, когда я добавляю файл конфигурации в ConsoleApplication, он все равно не находит его.

Ответы [ 2 ]

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

Я думаю, что эта проблема будет решена, если вы сможете скопировать файл cfg.xml в папку, содержащую сборку NHibernate

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

Он ищет файл конфигурации в этом каталоге, потому что это местоположение по умолчанию для NHibernate для поиска файла конфигурации. Обратите внимание, что это каталог, он не имеет ничего общего с пространствами имен. Вам необходимо установить свойства файла hibernate.cfg.xml в вашем проекте, чтобы скопировать его в выходной каталог.

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