[Nhibernate 1.2.1] MVC + MOR + TypeInitializationException.
Bonjour à tous,
Voici mon problème.
Je travaille sous VS2005 avec le framework 2.0.
J'ai dans ma solution 4 projet + 1 (pour tester) pour répondre à l'architecture MVC. Je les site:
Une couche Common contenant les interfaces de mes objets métiers.
Une couche Controller contenant mes objets métiers
Une couche View contenant mon site en ASP.net
une couche Model qui logiquement fait le lien entre mes objets métiers et la BDD.
J'utilise une base SQL Server 2005 Express Edition.
Je dois utiliser NHibernate 1.2.1 pour gérer le lien entre objets et BDD.
N'ayant aucune expérience dans ce domaine j'ai essayé de suivre quelques "tutos" pour mettre en place un premier cas d'utilisation.
Je dois gérer mes utilisateurs (select, insert, update, delete).
Je ne sais pas où mettre mes fichiers de configuration et la référence NHibernate.
J'arrive donc à ce fichier XML (qui pour le moment est dans ma couche MODEL).
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<connectionStrings>
<add name="maConnectionString"
connectionString="Data Source=PORTABLE-JEROME\SQLexpress;Initial Catalog=final5;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="connection.connection_string">
Data Source=PORTABLE-JEROME\SQLexpress;Initial Catalog=final5;Integrated Security=True
</property>
<property assembly="CONTROLLER">
</property>
</session-factory>
</hibernate-configuration>
<!-- Leave the system.web section unchanged -->
<system.web>
</system.web>
</configuration> |
- Observez vous déjà des erreurs dans ce premier fichier ?
J'ai ensuite ma classe Utilisateur.cs dans mon projet CONTROLLER
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
using System;
using Common.Interfaces;
using System.Collections.Generic;
using Common;
namespace CONTROLLER
{
public class Utilisateur:IUtilisateur
{
private string login;
private string password;
private DateTime derniereConnexion;
private IRessource ressource;
#region constructeurs
public Utilisateur()
{
this.login = null;
this.password = null;
this.derniereConnexion = new DateTime(1, 1, 1);
}
public Utilisateur(string name, string pass, DateTime d, IRessource r)
{
this.login= name;
this.password = pass;
this.derniereConnexion = d;
this.ressource = r;
}
#endregion
#region accesseurs
public string Login
{
get { return this.login; }
set { this.login = value; }
}
public string Password
{
get { return this.password; }
set { this.password = value; }
}
public DateTime DerniereConnexion
{
get { return this.derniereConnexion; }
set { this.derniereConnexion = value; }
}
public IRessource Ressource
{
get { return this.ressource; }
set { this.ressource = value; }
}
#endregion
}
} |
et son fichier associé
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="CONTROLLER" assembly="CONTROLLER">
<class name="Utilisateur" table="Utilisateur">
<id name="Login">
<column name="login_utilisateur" sql-type="varchar(20)" not-null="true"/>
</id>
<property name="Password">
<column name="password_utilisateur" sql-type="varchar(20)" not-null="true" />
</property>
<property name="Id_ressource" />
<property name="Derniere_connexion" />
</class>
</hibernate-mapping> |
En ce qui concerne ma table Utilisateur en BDD voici sa structure :
[IMG]file:///C:/Users/jerome/Desktop/structure.jpg[/IMG]
Code:
1 2 3 4 5
|
LOGIN_UTILISATEUR varchar(20)
ID_RESSOURCE numeric(11, 0)
PASSWORD_UTILISATEUR varchar(20)
DERNIERE_CONNEXION datetime |
Le login est ma primary key bien sur.
Je n'ai aucune erreur à la compilation.
En revanche lorsque j'execute cette methode une erreur apparait :
Code:
1 2 3 4 5 6 7 8 9
| ISession session = NHibernateHelper.GetCurrentSession();
ITransaction tx = session.BeginTransaction();
IUtilisateur us = new Utilisateur();
us.Login = "u1";
us.Password = "u1pass";
us.DerniereConnexion = DateTime.Now;
session.Save(us);
tx.Commit();
NHibernateHelper.CloseSession(); |
J'ai dans mon projet MODEL 1 classes pour l'utilisation de "Nhibernate"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
using System;
using System.Web;
using NHibernate;
using NHibernate.Cfg;
namespace MODEL
{
public sealed class NHibernateHelper
{
private const string CurrentSessionKey = "nhibernate.current_session";
private static readonly ISessionFactory sessionFactory;
static NHibernateHelper()
{
sessionFactory = new Configuration().Configure().BuildSessionFactory();
}
public static ISession GetCurrentSession()
{
HttpContext context = HttpContext.Current;
ISession currentSession = context.Items[CurrentSessionKey] as ISession;
if (currentSession == null)
{
currentSession = sessionFactory.OpenSession();
context.Items[CurrentSessionKey] = currentSession;
}
return currentSession;
}
public static void CloseSession()
{
HttpContext context = HttpContext.Current;
ISession currentSession = context.Items[CurrentSessionKey] as ISession;
if (currentSession == null)
{
// No current session
return;
}
currentSession.Close();
context.Items.Remove(CurrentSessionKey);
}
public static void CloseSessionFactory()
{
if (sessionFactory != null)
{
sessionFactory.Close();
}
}
}
} |
Citation:
L'erreur générée est la suivante :
L'exception System.TypeInitializationException n'a pas été gérée
Message="Une exception a été levée par l'initialiseur de type pour 'MODEL.NHibernateHelper'."
Source="MODEL"
TypeName="MODEL.NHibernateHelper"
Dans le détail de l'erreur je peux lire ceci :
Citation:
Impossible de trouver le fichier 'D:\\cours\\Stages\\entreprise\\Projet RECRUTEMENT\\Recrutement 3.0\\ProjetTest\\bin\\Debug\\hibernate.cfg.xml'.":"D:\\cours\\Stages\\entreprise\\Projet RECRUTEMENT\\Recrutement 3.0\\ProjetTest\\bin\\Debug\\hibernate.cfg.xml
Je ne m'en sors pas. J'attends toutes vos remarques ou questions si vous souhaitez que j'apporte encore des précisions.
MERCI.
1 pièce(s) jointe(s)
The type initializer for 'NHibernateHelper' threw an exception
Salut
Je suis en train de développer une application avec .Net utilisant NHibernate et j'ai le meme probeleme que vous, est ce vous pourriez me dire comment vous avez fait pour résoudre ce probleme.
Si quelqu'un a deja rencontré ce probeleme merci de m'aider a le resoudre.
Vous trouvez ci-joint une image illustrant l'exception que j 'ai.