Sunday, September 26, 2010

Interesting Changes in NHibernate 3.0

There are tons of new features in NHibernate 3.0. I'm going to highlight a few minor interesting ones from my view.

Client Profile Support
The .NET client profile is now supported out of the box.  Castle.Core also supports the client profile as well, so the Castle bytecode provider will work out of the box as well.  Great news for those who write desktop apps.

Logging Abstraction
In getting support for the client profile, log4net was an issue.  It hasn't been updated in ages and doesn't support the client profile itself.  This issue combined with other people's desire for a logging abstraction now means that NHibernate supports pluggable loggers.  You can use the NHibernate.Logging package to get support for libraries such as Common.Logging.  This also enables use of the excellent NLog framework, which is actively updated.

Polymorphism in Get and Load
Previously, Get and Load methods on the session required the exact mapped type.  Now, they allow you to specify a class or interface higher up the inheritance hierarchy, as long as there's only one match.  This will allow people to eliminate their own mapping layers when it comes to retrieving objects by primary key.  Importantly, this will make ActiveRecord work much better with interfaces.

Fixes for IdBag
The identifier bag had a bunch of bugs, especially ones that manifest themselves more when used in rich client applications.  If you had problems before, try it again.

ISQLFunction Argument Repetition
[Update: This will not be included in 3.0]

Though it's not in the trunk, I'm also excited about the potential inclusion of NH-2318.  This will let us write functions for dialects that have non-trivial argument patterns.  For example, a NullSafeEquals function could be written as (?1 IS NULL AND ?2 IS NULL) OR (?1 IS NOT NULL AND ?2 IS NOT NULL AND ?1 = ?2).  With the current code, such a function breaks because it repeats arguments.  The patch also deals with argument reording or removal, but it doesn't support ordinal parameters at the moment.  We'll see if this one happens to make it in.

All in all, NHibernate 3.0 is a very exciting release that many contributors have put a lot of hard work into.

No comments: