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 3.3.3 'No persister for' [Débutant]


Sujet :

NHibernate

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut NHibernate 3.3.3 'No persister for'
    Bonjour tout le monde,

    Je suis sur un casse tête depuis ce matin ><.

    Alors j'obtiens 'No persister for' avec le code que je vais vous mettre en-dessous.

    Si je mets 'config.AddClass(typeof(Secteur));' , il me dit qu'il ne trouve pas 'BaseDeDonnee.Modele.Mapping.Secteur.hbm.xml'.

    donc je suppose que j'ai des erreurs de chemin :/.

    pour info, je fais une appli test en C# sous SQL Serveur 2000.


    Classe Secteur
    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
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
     
    namespace BaseDeDonnee.Modele.Mapping
    {
        class Secteur
        {
            // propriétés automatiques 
            public virtual int Id { get; set; }
            public virtual string Code { get; set; }
     
            // constructeurs 
            public Secteur() { }
     
            // ToString
     
            public override string ToString()
            {
                return string.Format("Secteur {0}: '{1}'", Id, Code);
            }
        }
    }
    Secteur.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                       namespace="BaseDeDonnee.Modele.Mapping"
                       assembly="BaseDeDonnee">
     
        <class name="Secteur" table="SECTEUR">
            <id name="Id" column="id_Secteur" type="int">
                <generator class="native" />
            </id>
            <property name="Code" column="code"/>
        </class>
     
    </hibernate-mapping>
    App.config
    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
     
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <!-- sections de configuration -->
        <configSections>
            <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
        </configSections>
     
     
        <!-- configuration NHibernate -->
        <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
            <session-factory>
                <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
     
                <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
     
                <property name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
                <property name="connection.connection_string">
                    Server="xxxxx";Database=PROJETBOUTIQUE;Uid=User;Pwd=toto;
                </property>
                <property name="show_sql">true</property>
                <!--<mapping resource="BaseDeDonnee.Modele.Mapping.Secteur" file="D:/ASP.NET/BaseDeDonnee/BaseDeDonnee/Modele/Mapping/Secteur.hbm.xml" assembly="BaseDeDonnee"/>-->
            </session-factory>
        </hibernate-configuration>
    </configuration>

    Class test
    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
     
    using System;
    using NHibernate;
    using NHibernate.Cfg;
    using BaseDeDonnee.Modele.Mapping;
     
    namespace BaseDeDonnee
    {
        class ControleurHibernate
        {
            public void test(){
                try{
     
                    // setup nhibernate configuration
                    Configuration config = new Configuration();
                    // add our assembly
                    config.AddAssembly(typeof(Secteur).Assembly);
                    Console.WriteLine(typeof(Secteur).Assembly);
                    //config.AddClass(typeof(Secteur));
                    // setup nhibernate session
                    NHibernate.ISessionFactory sessionFactory = config.BuildSessionFactory();
     
                    // ouverture session  
                    ISession session = sessionFactory.OpenSession();
                    // début transaction 
                    ITransaction transaction = session.BeginTransaction();
     
                    Secteur s = new Secteur();
     
                    s.Code = "BEL";
     
                    session.Save(s);
     
                    session.Flush();
                    transaction.Commit();
     
                    session.Close();
                    sessionFactory.Close();
     
                }catch (Exception ex){ 
                    Console.WriteLine("Error :" + ex.Message);
                } 
            }
        }
    }
    Image dossier

    C'est pas très propre, mais c'est simplement pour des testes .

    Alors voilà, j'ai testé plusieurs façons pour ajouter mes classes etc... mais en vain. Comme je l'ai dit, je pense qu'il ne trouve pas les liens des classes XML mapping...

    dite moi si c'est une bonne solution de passer par App.config... je n'ai pas essayer un autre moyen.

    Enfin merci d'avance .

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // setup nhibernate configuration
                    Configuration config = new Configuration();
                   // config.Configure("App.config");
                    // add our assembly
                    config.AddAssembly(typeof(Secteur).Assembly);                
                    Console.WriteLine(typeof(Secteur).Assembly);
                    //config.AddFile(typeof(Secteur).Name);
                    config.AddClass(typeof(Secteur));
    quand j'exécute ce code il me met qu'il ne peux trouver le fichier BaseDedonnee.Modele.Mapping.Secteur.hbm.xml

    Comment puis-je lui faire trouver ce fichier?

    Bon si je mets le chemin complet, il le prend via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    config.AddFile("D:\\Project\\...\\BaseDeDonnee\\Modele\\Mapping\\Secteur.hbm.xml");
    Il n'y aurait pas juste une methode plus propre? :/

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Silverlight / Wpf / Wpf8 / Wp8
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Silverlight / Wpf / Wpf8 / Wp8
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Question bête, surement tu as déjà essayé, mais dans le fichier de config as tu essayé remplacé les '/' par des '\' ou '\\' ?

    Je sais que NHibernate est assez susceptible.
    Après il est possible qu'il trace l'erreur de mapping dans des logs si tu les a activé.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Salut ,

    Merci pour ton poste.

    Alors effectivement, il n'y a pas de soucis quand je mets les \\ comme dans mon deuxième poste, il prend mes fichiers mappés.

    Mais je trouve un peux nul de devoir mettre le chemin complet("D:\\...\\ficheir.hbm.xml") alors qu'ils sont bien dans le projet...

    en plus ici, le projet est interne sur mon disque D, mais après c'est un projet WEB en ASP.NET, donc je n'ai pas envie que cela me pause des soucis plutard...

    Alors si quelqu'un a une petite explication pour comment atteindre ces fichiers XML, je suis preneur .

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Silverlight / Wpf / Wpf8 / Wp8
    Inscrit en
    Juin 2013
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Silverlight / Wpf / Wpf8 / Wp8
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2013
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    pour les '\\' je pensait au fichier de config web.config.

    Sinon dans les propriétés des fichiers hbm tu dois surement devoir jouer avec le "Build Action" car si il est en mode "None" les fichiers seront inconnue ou alors avec le "Copy to Output Directory". Je n'ai plus de projet NHibernate pour te répondre plus précisement. Mais je suis convaincue que ca vient d'un des trois.

    Dernière idée concernant le chemin dans le fichier de config './...' ...

    Sinon bonne chance

    (Si tu as la solution poste la

  6. #6
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Salut,

    Merci à toi encore.

    Pour dans le fichier config, oui ça marche aussi .

    Je regarde pour le reste et je dis quoi.

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2012
    Messages : 133
    Points : 122
    Points
    122
    Par défaut
    Re,

    voici la solution avec 'Built action' ou 'Action de génération' en francais:

    dans l'explorateur de solutions, il faut cliquer droit sur tout les 'hbm.xml' et dans leurs propriétés,

    -> il faut changer l'option 'Built action' ou 'Action de génération' et mettre 'embedded resource' ou 'Ressource incoporée' !!!

    ensuite il suffit de préciser l'assembly .

    Par contre, préciser l'assembly via le fichier config
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <mapping resource="Secteur" assembly="BaseDeDonnee"/>
    Cela ne marche pas, mais mettre dans la classe de configuration
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.Configuration.AddAssembly(this.GetType().Assembly);
    Pas de soucis, cela fonctionne.

    Ma fois, ce n'est pas trop grave à part pour l'organisation...

    une idée?

    Sinon je te remercie .

    Est-ce que je change le titre pour un titre plus précis sur mon problème pour la recherche?

    Cordialement,

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 24/05/2011, 10h27
  2. Réponses: 8
    Dernier message: 11/12/2007, 11h12
  3. Réponses: 4
    Dernier message: 01/12/2007, 22h22
  4. no persistent classes found for query class
    Par jamalmoundir dans le forum Hibernate
    Réponses: 4
    Dernier message: 12/07/2007, 15h19
  5. Réponses: 3
    Dernier message: 19/05/2006, 20h38

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