Configuration changes in NHibernate 2.0
I downloaded NHibernate 2.0 today and started to play around with it, only to be greeted by a host of configuration errors like System.InvalidOperationException : Could not find the dialect in the configuration. It was then I remembered reading somewhere about some changes to the configuration syntax, so I downloaded the source and looked at the examples (after a brief, ill-fated search for NHibernate 2.0-specific documentation*).
Here is an example of how an App.config looked for NHibernate 1.2:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</configSections>
<nhibernate>
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2005Dialect" />
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.connection.connection_string" value="Data Source=127.0.0.1\SQLEXPRESS;Initial Catalog=DbWorkshop;Integrated Security=True" />
</nhibernate>
</configuration>
And here is the equivalent for version 2.0:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<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">Data Source=127.0.0.1\SQLEXPRESS;Initial Catalog=DbWorkshop;Integrated Security=True</property>
</session-factory>
</hibernate-configuration>
</configuration>
The main changes are:
- We aren't using an
nhibernateconfiguration section, it'shibernate-configurationnow (yay for more typing! :P). - We now have a
session-factorychild node for adding the configuration properties. - We aren't adding properties using the
<add key="..." value="..." />syntax. Instead we are using<property name="...">(property value)</property>. - The property names aren't prefixed by "hibernate" anymore, so "hibernate.connection.provider" becomes "connection.provider".
Moral of the story is to check the source first -- the NHibernate.Examples folder is filled with helpful goodies. :) Svend Tofte also has a helpful post on setting up NHibernate 2.0.


6 comments:
Thanks Dave,
this has really helped me sort out the same problem in our factory configuration, though just using the config properties collection rather than xml config files.
Theo,
Kenya
Great! I didn't think I'd be the only one to be caught by this. Glad you found the post and that it helped. :)
Cheers,
David
Thanks for your help!
By upgrading from NHibernate 1.2, I also had to add this config line:
property name="cache.use_second_level_cache">false
because I was getting this exception:
NHibernate.Cache.NoCachingEnabledException: Second-level cache is enabled, but no cache provider was selected.
If it can help anyone...
Thanks Aline :)
Thanks for the post, it really helped me out. I was following an example that used the old mapping and I had NHibernate 2 installed. Took me some time to get it working but all working now, thanks again
@Anonymous #2, glad it helped! :)
Post a Comment