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 : Sélectionner tout - Visualiser dans une fenêtre à part
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>
  1. Observez vous déjà des erreurs dans ce premier fichier ?


J'ai ensuite ma classe Utilisateur.cs dans mon projet CONTROLLER
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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();
            }
        }
    }
}
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 :
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.