理论上支持的数据库
NHibernate is primarily tested on Microsoft SQL Server 2000. It is also known
to work on these databases:
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>
Issues
SQLite currently fails 17 tests out of approximately 500 in NHibernate
test suite. Some of the failures are caused by SQLite being unable to
store strings containing NUL characters, other tests fail because of a bug
in SQLite ADO.NET provider when using a table with spaces in its name.
以上为转载,原文请参见:http://www.cnblogs.com/dzone/archive/2011/04/01/2001828.html
NHibernate 支持的数据库及配置参数,码迷,mamicode.com