2011-01-09 5 views
0

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

<?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, поэтому я не совсем уверен, что я здесь делаю неправильно. Есть идеи?

Редактировать

Внутреннее исключение состоит в следующем:

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

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

+1

Публиковать содержимое, за исключением пожалуйста. – Vadim

+0

@Yads: Я обновил свой пост. –

ответ

0

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

+0

Прости, уже поздно - пространство имен не было тем словом, которое я имел в виду. Настройка файла для копирования на вывод была тем, что я искал, спасибо! –

0

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

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