Tuesday, 20 February 2007
Yesterday we were releasing Genome 3.1. After making quite a big step from Genome 2.6 to 3.0 last November, I thought the 3.1 release would allow us to take a breath, do some polishing on the code and finish some of the stuff that just didn’t make it into 3.0.

How wrong I was.

The length of the What’s New for Genome 3.1 will easily tell you that this is not a minor upgrade. Some major improvements have been put into this release, so it is definitely worth upgrading to as soon as possible to 3.1 for everyone working with Genome.

For people who have already delved into Genome, the two coolest new features in my opinion are the new QueryProvider mapping and the new explicit context management possibilities (context bound objects and sets):

The new QueryProvider mapping removes the last reason why anybody would express OQL in the source code using literal strings. Queries providing static entry points to the domain model can now be mapped to an interface or abstract class. As with any other mapped OQL already, these queries will already be parsed and checked during compile time. No more errors thrown at you by the database during runtime due to errors in query logic. And because the query is already translated during compile time, performance is also improved.

The explicit context management is a feature requested by many developers who build WinForms applications. Persistent objects and sets can now be bound to an explicitly specified Context that can maintain state for a Form, Control or whatever fits your scenario. The convenient implicit context management can still be used wherever it brings advantages.

We have also introduced a lot of other features such as support for the Microsoft SqlCE (a stripped-down SQL engine that can be hosted in-process), several mapping enhancements, improvements for the database reverse engineering wizard, improved Visual Studio editor integration, additional performance optimisations and adaptations that were necessary for Windows Vista and Visual Studio 2005 Service Pack 1.

We have even included a feature in the release which has not been announced officially: the GenMock framework, which helps you mock Genome mapped persistent objects and integrates with NMock. The reason why we haven’t mentioned the feature officially yet is that we are still discussing some API naming details, and mostly that we couldn’t finish the documentation for GenMock on time. We will definitely blog about GenMock and how it can be used in one of the following posts.

Since I already mentioned documentation, I really think we took a leap forward in this matter. The API reference is now fully adapted to the changes we made with 3.0 and we have overhauled the existing user’s guide chapters (including the quite extensive OQL user’s guide) and added some important new guides (like a guide about how state can be managed with Genome).

Finally, we have upgraded our LINQ integration so that Genome now also allows LINQ expressions to be used in the mapping file. This means that you can reuse mapped LINQ expressions in other LINQ expressions (something not possible with Linq2Sql), making it easy to build and maintain complex query logic.

So everybody who already wanted to try out Genome – now is the best time ever, and everybody who is using Genome 3.0 already – upgrade to 3.1, better today than tomorrow.

Posted by Chris.