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 et MySql 5.0


Sujet :

NHibernate

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Points : 7
    Points
    7
    Par défaut NHibernate et MySql 5.0
    Bonjour,
    je suis en train de développer une petite application utilisant NHibernate sur une base de données MySQL 5.0. Je développe dans le langage c#.
    Sachant qu'il ne s'agit d'un projet console simple.

    Voici la table de la base :
    CREATE TABLE users (
    LogonID varchar(20) primary key NOT NULL default '0',
    Name varchar(40) default NULL,
    Password varchar(20) default NULL,
    EmailAddress varchar(40) default NULL,
    LastLogon date default NULL);
    Voici ma class entity User :
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace persistance_NHibernate
    {
    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; }
    }

    }
    }
    Voici mon fichier de mapping User.hbm.xml:
    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping xmlns="urn:nhibernate-mapping-2.0">
    <class name="persistance_NHibernate.User, persistance_NHibernate" 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>
    Voici mon fichier App.config.xml qui configure mon application :
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
    <configSections>
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate"/>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
    </configSections>

    <!-- Sélectionnez le type de base de donnée à utiliser et définissez sa ChaîneDeConnexion -->
    <!-- Valeurs possibles: Access, MSSQL ou MySQL -->
    <appSettings>
    <add key="BaseDeDonnées" value="MySQL" />
    <add key="Access.ChaîneDeConnexion" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=nhibernate.mdb" />
    <add key="MSSQL.ChaîneDeConnexion" value="Data Source=(local);Initial Catalog=nhibernate;Integrated Security=SSPI" />
    <add key="MySQL.ChaîneDeConnexion" value="Server=localhost;Database=commande;User ID=root;Password=root" />
    </appSettings>

    <!-- ................................................................................. -->
    <!-- Cette section contient les informations nécessaires à la configuration de log4net -->
    <!-- ................................................................................. -->
    <log4net>
    <!-- Définie une sortie (où les textes de débogage peuvent aller) -->
    <appender name="SortieVersUnFichier" type="log4net.Appender.FileAppender, log4net">
    <param name="File" value="log.txt" />
    <param name="AppendToFile" value="false" />
    <layout type="log4net.Layout.PatternLayout, log4net">
    <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %m%n" />
    </layout>
    </appender>

    <!-- Définie la catégorie racine, son niveau de priorité par défaut et ajoute le(s) sortie(s) (où les textes de débogage vont aller) -->
    <root>
    <priority value="WARN" />
    <appender-ref ref="SortieVersUnFichier" />
    </root>

    <!-- Spécifie le niveau de certain namespaces -->
    <!-- Le niveau peut être : ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->
    <logger name="NHibernate">
    <level value="INFO" />
    </logger>
    </log4net>

    <!-- .................................................................................... -->
    <!-- Cette section contient les informations nécessaires à la configuration de NHibernate -->
    <!-- .................................................................................... -->

    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">

    <!-- an ISessionFactory instance -->
    <session-factory name="nhibernate_commande">

    <property name="connection.provider">
    NHibernate.Connection.DriverConnectionProvider
    </property>

    <property name="connection.driver_class">
    NHibernate.Driver.MySqlDataDriver
    </property>

    <property name="dialect">
    NHibernate.Dialect.MySQL5Dialect
    </property>

    <property name="connection.connection_string">
    Server=localhost;Database=commande;User ID=root;Password=root
    </property>

    <property name="show_sql">false</property>

    <mapping assembly="persistance_NHibernate" />

    <!-- mapping files
    <mapping resource="persistance_NHibernate.User.hbm.xml" assembly="persistance_NHibernate" /> -->

    </session-factory>

    </hibernate-configuration>

    </configuration>
    Puis, voici mon humble code :
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using NHibernate;

    namespace persistance_NHibernate
    {
    class Program
    {
    [System.STAThread]
    static void Main(string[] args)
    {

    System.Console.Out.WriteLine("L'application démarre...\n");

    try
    {
    System.Console.Out.WriteLine("Configuration de NHibernate...\n");

    //Connection à la base de données MySql VIA le fichier de configuration App.config.xml
    ISessionFactory factory = new NHibernate.Cfg.Configuration()
    .Configure("App.config.xml")
    .BuildSessionFactory();

    //Ouverture d'une session sur la base
    ISession session = factory.OpenSession();
    //Ouverture d'une transaction
    ITransaction transaction = session.BeginTransaction();
    transaction.Begin();
    //Création d'un nouvel utilisateur
    User newUser = new User();
    newUser.Id = "joe_cool";
    newUser.UserName = "Joseph Cool";
    newUser.Password = "abc123";
    newUser.EmailAddress = "joe@cool.com";
    newUser.LastLogon = DateTime.Now;

    //Appel de NHibernate pour que l'objet soit sauvé
    session.Save(newUser);

    // commit pour valider la transaction
    transaction.Commit();
    session.Close();
    }
    catch (System.Exception ex)
    {
    System.Console.Error.WriteLine("\n\n" + ex.ToString() + "\n\n");
    }
    finally
    {
    System.Console.Out.WriteLine("\nL'application est fermée!\n");
    System.Console.ReadLine();
    }
    }
    }
    }
    Et pour finir voici le message d'erreur que me crache la console :

    L'application démarre...

    Configuration de NHibernate...

    NHibernate.ADOException: cannot open connection ---> System.InvalidOperationExce
    ption: Connection must be valid and open
    à MySql.Data.MySqlClient.MySqlCommand.CheckState()
    à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)

    à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
    à MySql.Data.MySqlClient.Driver.ShowWarnings(Int32 count)
    à MySql.Data.MySqlClient.NativeDriver.ReadEOF(Boolean readPacket)
    à MySql.Data.MySqlClient.NativeDriver.ReadFieldMetadata(Int32 count, MySqlFie
    ld[]& fields)
    à MySql.Data.MySqlClient.CommandResult.Load()
    à MySql.Data.MySqlClient.MySqlDataReader.NextResult()
    à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)

    à MySql.Data.MySqlClient.MySqlCommand.ExecuteReader()
    à MySql.Data.MySqlClient.Driver.Configure(MySqlConnection connection)
    à MySql.Data.MySqlClient.NativeDriver.Configure(MySqlConnection connection)
    à MySql.Data.MySqlClient.MySqlConnection.Open()
    à NHibernate.Connection.DriverConnectionProvider.GetConnection()
    à NHibernate.Impl.SessionFactoryImpl.OpenConnection()
    --- Fin de la trace de la pile d'exception interne ---
    à NHibernate.Impl.SessionFactoryImpl.OpenConnection()
    à NHibernate.Impl.ConnectionManager.GetConnection()
    à NHibernate.Impl.SessionImpl.get_Connection()
    à NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
    à NHibernate.Transaction.AdoTransaction.Begin()
    à NHibernate.Impl.ConnectionManager.BeginTransaction()
    à NHibernate.Impl.SessionImpl.BeginTransaction()
    à persistance_NHibernate.Program.Main(String[] args) dans D:\Mes Documents\Vi
    sual Studio 2008\Projects\persistance_NHibernate\persistance_NHibernate\Program.
    cs:ligne 29

    L'application est fermée!
    Apparemment il y a un problème de connection avec MySql, mais je suis bloqué, je suis a cours d'idée de possibilité de debogage.
    Si quelqu'un peut m'aider ???
    Cordialement

  2. #2
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 10
    Points : 10
    Points
    10
    Par défaut Hibernate
    Salut,
    Il y a un problème dans la construction de ta session Hibernate
    Vérifie ta chaîne de connexion, elle est invalide.


    Autre chose:
    Je crois que Hibernate impose que les méthodes de "User" soient virtual:
    (à cause du lazy load)

    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
     
    public virtual string Id 
    {
    get { return id; }
    set { id = value; }
    }
     
    public virtual string UserName 
    {
    get { return userName; }
    set { userName = value; }
    }
     
    public virtual string Password 
    {
    get { return password; }
    set { password = value; }
    }
     
    public virtual string EmailAddress 
    {
    get { return emailAddress; }
    set { emailAddress = value; }
    }
     
    public virtual DateTime LastLogon 
    {
    get { return lastLogon; }
    set { lastLogon = value; }
    }

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/04/2013, 18h43
  2. Réponses: 9
    Dernier message: 03/11/2011, 15h26
  3. Réplication BDD Nhibernate Mysql
    Par Hawkwood dans le forum NHibernate
    Réponses: 1
    Dernier message: 20/08/2009, 10h17
  4. Configuration NHibernate et MySQL
    Par gmanouvrier dans le forum NHibernate
    Réponses: 1
    Dernier message: 26/07/2007, 15h00
  5. [C# 2.0] NHibernate MySql
    Par malbaladejo dans le forum NHibernate
    Réponses: 2
    Dernier message: 04/05/2007, 17h43

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