Bonsoir à toutes et à tous,

je dois organiser mon app asp.net (C#, postgres) avec NHibernate.
Je commence donc par faire des tuto... déjà ca coince.

1. Je crée un nouveau site web

2. J'ajoute les références NHibernate et Postgres

3. Je configure NHibernate dans mon web.config, ca donne ceci :
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
 
<configSections>
    <section
        name="hibernate-configuration"
        type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
  </configSections>
 
  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.0">
    <session-factory name="nhibernate.current_session">
      <property name="dialect">NHibernate.Dialect.PostgreSQLDialect</property>
      <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
      <property name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
      <property name="connection.connection_string">Server=localhost;Database=tutriel_NHibernate;User ID=pg_user;Password=pg2stUSs;Encoding=UNICODE</property>
      <mapping assembly="NHibernateClasses" />
      <mapping resource="User.hbm.xml" assembly="NHibernateClasses" />
    </session-factory>
  </hibernate-configuration>
4. Je crée une table Users dans ma base de donnée

5. Je crée une classe User
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
 
namespace NHibernateClasses
{
    public class User
    {
        private string id;
        private string userName;
        private string password;
        private string emailAddress;
        private DateTime lastLogon;
 
        public User()
        {
        }
 
        public string Id
        {
            get { return id; }
            set { id = value; }
        }
 
        public string UserName
        {
            get { return userName; }
            set { userName = value; }
        }
 
        public string Password
        {
            get { return password; }
            set { password = value; }
        }
 
        public string EmailAddress
        {
            get { return emailAddress; }
            set { emailAddress = value; }
        }
 
        public DateTime LastLogon
        {
            get { return lastLogon; }
            set { lastLogon = value; }
        }
    }
}
6. Je crée un fichier User.hbm.xml pour mapper mon objet User
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
 
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.0"
                   assembly="NHibernateClasses" namespace="NHibernateClasses">
  >
 
  <class name="NHibernateClasses.User" table="users">
    <id name="Id" column="LogonId" type="String" length="20">
      <generator class="assigned" />
    </id>
    <property name="UserName" column="Name" type="String" length="40"/>
    <property name="Password" type="String" length="20"/>
    <property name="EmailAddress" type="String" length="40"/>
    <property name="LastLogon" type="DateTime"/>
  </class>
</hibernate-mapping>
7. A ce stade, toutes les étapes du mapping sont réalisées...

TEST :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
        ISession session = NHibernateHelper.GetCurrentSession();
        ITransaction tx = session.BeginTransaction();
 
        User newUser = new User();
        newUser.Id = "joe_cool";
        newUser.UserName = "Joseph Cool";
        newUser.Password = "abc123";
        newUser.EmailAddress = "joe@cool.com";
        newUser.LastLogon = DateTime.Now;
 
        session.Save(newUser);
        tx.Commit();
Resultat
exception levée par session.Save(newUser) :
MappingException : Unknow Entity User

Je suis sous VS2005 avec le FrameWork 2.0 la derniere version de NHibernate....

Je me dis que la mapping ne doit pas se faire correctement, j'entend parler de la propriété du fichier XML Build Action = Embedded, elle n'est dispo sous VS2003.
Alors j'ai créé une bibliotheque de classe NHibernateClasses et j'ai mis la classe User et son fichier mapping User.hbm.xml... sans resultat...
J'ai également testé avec un fichier de ressource dans lequel je référence mon fichier User.hbm.xml... sans succè...

Voilà, si quelqu'un à une idée moi je seche...

Merci d'avance