pontoNETpt
A comunidade PontoNetPT está direccionada a todos os programadores que trabalhem com a plataforma .NET.
[ NHibernate ] Banco de dados suportados pelo NHibernate

Gostaria apenas de fazer uma observação, a respeito da conexão com o banco de dados SQL2005Express que é um banco de dados gratuito da Microsoft, eu coloca minha configuração assim.

<property name="hibernate.connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="hibernate.dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="hibernate.connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="hibernate.connection.connection_string">Data Source=LEANDRO-PC\SQLEXPRESS;Initial Catalog=NOMEDOBANCO;Integrated Security=SSPI</property>

Onde "Integrated Security=SSPI" é para ele usar o usuário do Windows para autenticar.

 

{ Trecho abaixo retirado da documentação do NHibernate }

Microsoft SQL Server 2005/2000

SQL Server 2005 and 2000 are the primary databases used by the developers of NHibernate.

Configuration example:

<?xml version="1.0" ?>
<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">Server=(local);Initial Catalog=dbname;User Id=user;Password=********</property>
    </session-factory>
</hibernate-configuration>

For SQL Server 2000, change the dialect to NHibernate.Dialect.MsSql2000Dialect.

Issues

SQL Server sometimes ignores columns specified in ORDER BY clause of a query if they are not included in the SELECT clause. This behavior is actually valid according to the SQL standard, but may be surprising. For example, a query like this is not guaranteed to be ordered correctly:

from Person p order by p.Company.Name

Oracle

Oracle 9i and 10g are supported, both using Microsoft driver (System.Data.OracleClient) and using Oracle driver (Oracle.Data.OracleClient).

Issues

Microsoft's driver does not handle long character strings correctly. An error happens in some circumstances when using a string of length 2000-4000 as a parameter value.

Oracle cannot handle empty strings (""), you should use null instead. An IUserType implementation to perform the conversion is contained in Nullables.NHibernate library (part of NHibernateContrib package).


Microsoft Access

Microsoft Access has its own dialect and driver (contributed by Lukas Krejci).

They are currently in a separated library: NHibernate.JetDriver.dll (in NHibernateContrib package).

Here is what your hibernate.cfg.xml file should contain when using a Microsoft Access database:

<?xml version="1.0" ?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory>
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="dialect">NHibernate.JetDriver.JetDialect, NHibernate.JetDriver</property>
        <property name="connection.driver_class">NHibernate.JetDriver.JetDriver, NHibernate.JetDriver</property>
        <property name="connection.connection_string">Provider=Microsoft.Jet.OLEDB.4.0;Data Source=YourDatabaseFilePathHere.mdb</property>
    </session-factory>
</hibernate-configuration>

Issues

There are still few problems with join syntax in queries that use more than one join. This driver passes 93% of NHibernate tests (there are 23 failing tests).

The most complete topic about these issues is here: Using NHibernate with Microsoft Access 2003 / Jet 4.0. JIRA issues NH-124 and NH-437 have some information on problems with implementing Microsoft Access dialect. You can also try searching NHibernate forum for "access jet" (require all words).


Firebird

Firebird is supported since version 1.5.3, though version 2.0.1 is strongly recommended. To work with Firebird, install the latest Firebird .NET Data Provider. If the data provider is installed in the GAC (the standard behavior of its installer), add this section to your application configuration file (App.config or Web.config):

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <qualifyAssembly partialName="FirebirdSql.Data.FirebirdClient"
            fullName="FirebirdSql.Data.FirebirdClient, Version=2.0.1.0, Culture=neutral, PublicKeyToken=3750abcc3150b00c" />
    </assemblyBinding>
</runtime>

The value of the fullName attribute will depend on the version of the assembly you have installed in the GAC.

Here is what your hibernate.cfg.xml file should contain when using Firebird:

<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="NHibernate.Test">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.FirebirdClientDriver</property>
        <property name="connection.isolation">ReadCommitted</property>
        <property name="connection.connection_string">
            Server=localhost;
            Database=C:\nhibernate.fdb;
            User=SYSDBA;Password=masterkey
        </property>
        <property name="show_sql">false</property>
        <property name="dialect">NHibernate.Dialect.FirebirdDialect</property>
        <property name="use_outer_join">true</property>
        <property name="command_timeout">444</property>
        <property name="query.substitutions">true 1, false 0, yes 1, no 0</property>
    </session-factory>
</hibernate-configuration>

All Firebird 2.0.1 embedded functions are registered in the dialect, as well as user-defined functions from ib_udf2.sql. These functions can be used in HQL queries.


PostgreSQL

PostgreSQL version 7.4 with latest Npgsql works almost perfectly. Later versions should work too.

Configuration example:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="NHibernate.Test">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.NpgsqlDriver</property>
        <property name="connection.connection_string">
            Server=localhost;initial catalog=nhibernate;User ID=nhibernate;Password=********;
        </property>
        <property name="dialect">NHibernate.Dialect.PostgreSQLDialect</property>
    </session-factory>
</hibernate-configuration>

DB2 UDB

DB2 UDB is supported and reportedly even passes all the tests (see http://nhibernate.sourceforge.net/forum/viewtopic.php?t=73). Example configuration using the ODBC drivers that come with the 'stinger' release of db2:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.0" >

    <session-factory name="session">

        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.OdbcDriver</property>
        <property name="connection.connection_string">driver={IBM DB2 ODBC DRIVER};Database=db;hostname=host;port=port;protocol=TCPIP; uid=uid; pwd=pwd</property>
        <property name="show_sql">true</property>
        <property name="dialect">NHibernate.Dialect.DB2Dialect</property>
        <property name="use_outer_join">true</property>

        <mapping resource="..." />

    
    </session-factory>

</hibernate-configuration>

MySQL

All MySQL versions should work, though there are issues with zero dates (see below for details). To connect to your database use Connector/NET (formerly known as ByteFX.Data.MySqlClient).

Configuration example:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="NHibernate.Test">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
        <property name="connection.connection_string">
            Database=test;Data Source=someip;User Id=blah;Password=blah
        </property>
        <property name="dialect">NHibernate.Dialect.MySQLDialect</property>
    </session-factory>
</hibernate-configuration>

Issues

MySQL has a unique "feature" of allowing invalid dates in a DATE field, and especially using 0000-00-00 as a default value for DATE NOT NULL columns. When MySQL Connector encounters such a date, it either throws an exception or returns a non-standard MySqlDateTime object (depending on a connection string parameter) which throws an exception when converting itself to a DateTime.

Possible workarounds:

  • avoid zero dates
  • modify Connector/NET source code to round zero dates to DateTime.Min and back (see JIRA issue NH-32 for a patch to an older version of the Connector)
  • create a user type for MySqlDateTime (no known implementations currently)

SQLite

SQLite version 3 works rather well using ADO.NET provider available from http://sourceforge.net/projects/adodotnetsqlite. NHibernate Query Analyzer uses SQLite (see [Related Projects]).

Configuration example:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.2" >
    <session-factory name="NHibernate.Test">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
        <property name="connection.driver_class">NHibernate.Driver.SQLiteDriver</property>
        <property name="connection.connection_string">
            Data Source=nhibernate.db;Version=3
        </property>
        <property name="dialect">NHibernate.Dialect.SQLiteDialect</property>
        <property name="query.substitutions">true=1;false=0</property>
    </session-factory>
</hibernate-configuration>


Fonte de referência: http://www.hibernate.org/361.html

[]'s
Leandro Ribeiro


Posted 22-2-2008 17:59 por Leandro Ribeiro

Comments

Guilherme Cardoso, Blog PT wrote NHibernate - Introdução
on 12-6-2010 22:57

Nas próximas semanas vou dedicar algum tempo livre a estudar o NHibernate. Já ouvi falar

Canada fan wrote re: [ NHibernate ] Banco de dados suportados pelo NHibernate
on 21-9-2011 14:41

I have just discovered that M. Acces works with Nhibernate, too. It is kind of confusing when you see that it has such a simple design.

casinostock wrote re: [ NHibernate ] Banco de dados suportados pelo NHibernate
on 28-10-2011 15:50

Sorry what is this  i dont understand.

Add a Comment

(requerido)  
(opcional)
(requerido)  
Remember Me?
If you can't read this number refresh your screen
Enter the numbers above:  
Powered by Community Server (Commercial Edition), by Telligent Systems