2011-01-09 4 views
0

J'ai un peu de difficulté à configurer NHibernate, et je ne sais pas trop quel est le problème. J'essaie de sauvegarder un objet de domaine dans la base de données (Oracle 10g XE). Cependant, j'obtiens une exception TypeInitializationException en essayant de créer l'ISessionFactory. Voici ce que mon hibernate.cfg.xml ressemble:NHibernate ne parvient pas à créer 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> 

J'ai créé un OAC que je vais utiliser pour des objets persistants domaine à la base de données. DAO utilise une classe HibernateUtil qui crée la SessionFactory. Les deux classes se trouvent dans l'espace de noms DataAccess avec la configuration Hibernate. C'est là que l'exception se produit. Voici cette classe:

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

L'espace de noms DataAccess fait référence aux DLLs NHibernate. C'est pratiquement la même configuration que j'ai utilisée avec Hibernate en Java, donc je ne suis pas entièrement sûr de ce que je fais mal ici. Des idées?

Modifier

L'exception la plus profonde est la suivante:

« Impossible de trouver le fichier « C: \ Users \ Tyler \ Documents \ Visual Studio 2010 \ Projects \ MyProject \ MyProject \ ConsoleApplication \ bin \ Debug \ hibernate.cfg.xml '. " ConsoleApplication contient le point d'entrée où j'ai créé un objet Utilisateur et que j'essaie de le conserver avec mon DAO. Pourquoi cherche-t-il le fichier de configuration ici? La persistance réelle a lieu dans le DAO, qui est dans DataAccess. En outre, lorsque j'ajoute le fichier de configuration à ConsoleApplication, il ne le trouve toujours pas.

+1

Poster le contenu de l'exception s'il vous plaît. – Vadim

+0

@Yads: J'ai mis à jour mon message. –

Répondre

0

Il recherche le fichier de configuration dans ce répertoire car c'est l'emplacement par défaut pour NHibernate pour rechercher un fichier de configuration. Notez qu'il s'agit d'un répertoire, il n'a rien à voir avec les espaces de noms. Vous devez définir les propriétés du fichier hibernate.cfg.xml dans votre projet pour les copier dans le répertoire de sortie.

+0

Désolé, il est tard - l'espace de noms n'était pas le mot que je voulais dire. Définir le fichier à copier en sortie était ce que je cherchais, merci! –

0

Je pense que ce problème sera résolu si vous pouvez copier le fichier cfg.xml dans le dossier contenant l'ensemble NHibernate

Questions connexes