NHibernate et MySql 5.0 - C#/.NET managed - Programmation
Marsh Posté le 17-04-2008 à 09:29:07
Salut,
essaye ça.
PS: ma config est fait avec Sql server, j'ai fait un copier/coller de ma config donc il doit rester quelque ligne en SQL...
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate"
type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MySQL5Dialect " />
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.MySqlDataDriver " />
<add key="hibernate.connection.connection_string" value="Server=localhost;Initial Catalog=commande;User ID=root;Password=root; Max Pool Size=1000;Min Pool Size=1" />
<add key="hibernate.show_sql" value="true" />
</nhibernate>
<log4net>
<!-- Define some output appenders -->
<appender name="trace" type="log4net.Appender.TraceAppender, log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<appender name="console" type="log4net.Appender.ConsoleAppender, log4net">
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<appender name="rollingFile" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="c:\temp\log.txt"/>
<param name="AppendToFile" value="false"/>
<param name="RollingStyle" value="Date"/>
<param name="DatePattern" value="yyyy.MM.dd"/>
<param name="StaticLogFileName" value="true"/>
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
</layout>
</appender>
<root>
<priority value="DEBUG"/>
<appender-ref ref="console"/>
</root>
</log4net>
Marsh Posté le 17-04-2008 à 10:09:40
Bonjour,
merci pour ta réponse.
En fait j'ai trouvé la solution a mon problème. Je vais donc la donner pour capitaliser.
Donc pour mettre en place NHibernate 1.2 sous Visual Studio avec une base de données MySQL 5.0 il faut :
Marsh Posté le 17-04-2008 à 10:14:12
Oups désolé...
Donc il faut :
- Le fichier de configuration suivant :
|
Ensuite, il faut aussi ne pas oublier pour les fichiers de Mapping : nomDeTable.hbm.xml
de les déclarer comme ressource embarqué (Embedded Ressource).
Pour ce faire, il faut faire un click droit sur le fichier et choisir "Propiétés".
Ensuite choisir "Build Action" et lui affecter la valeur "Embedded Ressource".
Et voila, normalement tout fonctionne... Enfin pour moi ça marche.
En espérant que cette solution sera utile a quelqu'un.
Marsh Posté le 17-04-2008 à 10:17:55
J'ai oublié de dire aussi, qu'il faut copier à la racine du projet les dll suivantes :
ICSharpCode.SharpZipLib.dll et MySql.Data.dll
Le premier se trouve dans l'install de NHibernate.
Et MySql.Data.dll se trouve dans l'install de MySql. Car il ne faut pas oublier d'installer "mysql-connector-net-5.0.8.1.exe"
Sans quoi la liaison entre MySql et .net est impossible.
En fait ça en fait des choses. Même s'il n'y a rien de compliqué dans tout ça .
Marsh Posté le 15-04-2008 à 16:54:44
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 :
Citation:
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 :
Citation:
Voici mon fichier de mapping User.hbm.xml:
Citation:
<?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 :
Citation:
<?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] <%X{auth}> - %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 :
Citation:
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