IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

NHibernate Discussion :

[Nhibernate 1.2.1] MVC + MOR + TypeInitializationException.


Sujet :

NHibernate

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut [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 : 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.

  2. #2
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 7
    Points
    7
    Par défaut 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.
    Images attachées Images attachées  

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Juillet 2007
    Messages : 109
    Points : 83
    Points
    83
    Par défaut
    J'ai malheureusement abandonné Nhibernate.
    Si vous pouvez passer au framework 3.5 de Visual Studio Linq le remplace parfaitement.

  4. #4
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Est-ce que tu pourrais montrer ton web.config (la section sur NHibernate suffit) s'il te plait.

    Tu as bien pris la classe NHibernateHelper fourni sur le site ?

    Quant à Lestok désolé mais je pense avoir trouvé d'où venait ton erreur.
    Désolé de ne pas avoir vu ce thread plus tôt.

    Au lieu de
    <property assembly=... />
    il faut mettre (je crois bien)
    <mapping assembly=... />
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  5. #5
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Bonjour

    La partie qui porte sur NHibernate dans le fichier web.config est comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <nhibernate>
        <add key="hibernate.connection.provider"          
            value="NHibernate.Connection.DriverConnectionProvider" />
        <add key="hibernate.dialect"
     
            value="NHibernate.Dialect.MsSql2005Dialect" />
        <add key="hibernate.connection.driver_class"
            value="NHibernate.Driver.SqlClientDriver" />
        <add key="hibernate.connection.connection_string" 
            value="Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Documents and Settings\imane\Mes documents\Visual Studio 2005\Projects\myproject\App_Data\MyDb.mdf;Integrated Security=True;User Instance=True" />
        <add key="hibernate.connection.isolation" value="ReadCommitted" />
        <add key="hibernate.show_sql" value="True" />
      </nhibernate>
    En ce qui concerne NHibernateHelper:

    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
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    using System;
    using System.Data;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using NHibernate;
    using NHibernate.Cfg;
    using System.IO;
    using System.Reflection;
     
    /// <summary>
    /// Summary description for NHibernateHelper
    /// </summary>
    public sealed class NHibernateHelper
    {
        private const string sessionKey = "nhibernate.current_session";
        private static readonly ISessionFactory sessionFactory;
     
     
        public static ISession GetCurrentSession()
        {
            HttpContext context = HttpContext.Current;
            ISession currentSession = (ISession)context.Items[sessionKey];
     
            if (currentSession == null)
            {
                currentSession = sessionFactory.OpenSession();
                context.Items[sessionKey] = currentSession;
            }
     
            return currentSession;
        }
     
        static NHibernateHelper()
        {
            log4net.Config.XmlConfigurator.Configure();
     
            // Get the mapping file path
            String mappingPath = HttpContext.Current.Server.MapPath("/myproject/Mapping/");
     
            // Setup the configuration
            Configuration config = new Configuration()
                .AddFile(mappingPath + "Client.hbm.xml");
     
            // Build the session factory
            sessionFactory = config.BuildSessionFactory();
        }
     
     
        public static void CloseSession()
        {
            HttpContext context = HttpContext.Current;
            ISession currentSession = (ISession)context.Items[sessionKey];
     
            if (currentSession == null)
            {
                // No current session
                return;
            }
     
            currentSession.Close();
            context.Items.Remove(sessionKey);
        }
     
        public static void CloseSessionFactory()
        {
            if (sessionFactory != null)
            {
                sessionFactory.Close();
            }
        }
    }
    Merci pour votre aide

  6. #6
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Bizarre ton fichier de conf, tu as trouvé ça où ?

    Moi j'ai ça

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <configSections>
    		<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
    [...]</configSections>
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    		<session-factory>
    			<property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
    			<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    			<property name="connection.connection_string">Data Source=.\SQLEXPRESS;AttachDbFilename="|DataDirectory|\LeNomDeTaBdd.mdf";Integrated Security=True;User Instance=True</property>
    			<mapping assembly="LeNomDeTonAssembly"/>
    		</session-factory>
    	</hibernate-configuration>
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  7. #7
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Je l'ai trouvé dans un tutoriel portant sur NHibernate
    Je viens d'essayé avec ce que tu viens de m'envoyé et ça marche toujours pas, j'ai toujours la meme exception.
    Je crois que le probeleme viens du fait que la session crée par NHibernate est nulle.Pourquoi?j'ai aucune idée!!

  8. #8
    Futur Membre du Club
    Inscrit en
    Janvier 2008
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Stp est ce que tu peux m'envoyer ton NHibernateHelper?puisque c'est a ce niveau que la variable sessionFactory est crée

  9. #9
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par chimane9 Voir le message
    Stp est ce que tu peux m'envoyer ton NHibernateHelper?puisque c'est a ce niveau que la variable sessionFactory est crée
    Voici mon mien

    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
    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();
                }
            }
        }
    Avec le fichier de conf que je t'ai montré (avec bien sûr le bon nom de mon assembly et le bon nom de ma table).
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

Discussions similaires

  1. Réponses: 1
    Dernier message: 28/10/2009, 14h08
  2. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  3. [GEF]GEF EditViewPart MVC etc...
    Par georgemel dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 19/07/2007, 19h07
  4. [MVC] Différences entre les framework MVC push et pull ?
    Par XavierZERO dans le forum Frameworks Web
    Réponses: 5
    Dernier message: 15/01/2004, 13h12
  5. Classe abstraite / MVC
    Par caramel dans le forum MVC
    Réponses: 5
    Dernier message: 01/04/2003, 09h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo