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>
- Observez vous déjà des erreurs dans ce premier fichier ?
J'ai ensuite ma classe Utilisateur.cs dans mon projet CONTROLLER
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
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 } }
En ce qui concerne ma table Utilisateur en BDD voici sa structure :
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>
[IMG]file:///C:/Users/jerome/Desktop/structure.jpg[/IMG]
Le login est ma primary key bien sur.
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
Je n'ai aucune erreur à la compilation.
En revanche lorsque j'execute cette methode une erreur apparait :
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 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();
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(); } } } }Dans le détail de l'erreur je peux lire ceci :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"
Je ne m'en sors pas. J'attends toutes vos remarques ou questions si vous souhaitez que j'apporte encore des précisions.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
MERCI.
Partager