Or perhaps it was actually NHibernate at fault. I was trying to set up a many-to-many relationship with attributes on the association table and the ActiveRecord CreateSchema call just kept complaining that my assocation table already exists and cannot be created again.

After an hour or so of head-scatching, turns out the error only occurs when I use GUIDs as the primary key in the association table. Switching to good old "int" solved everything. I wonder if that has been fixed in the trunk, I should go code spelunking.

Nice post by Joseph Guadagno about database drivers not provided by Microsoft. He missed a few though, so here they are:

PostgreSQL

PostgreSQL needs no introductions. Probably my favourite open source DBMS. Npgsql is de facto the ADO.NET provider. Performance and stability seems alright.

PostgreSQLDirect .NET is a commercial provider, and its supposed to out-perform Npgsql while providing more features. I have never used it so don’t take my word for it.

Firebird

Firebird was forked from the open source release of Borland’s InterBase. Most of you tech-oriented folk might know of it due to the name dispute with Mozilla Firefox (a.k.a. Firebird a.k.a.Phoenix) back in 2003. Its a pretty sweet product, easy to work with. I have not implemented very large projects with it, but the word is that it scales well, and has a small footprint both on disk (downloads are ~5 megs) and in memory. The only features I miss are temporary tables (coming in 2.1 which is in beta now) and materialised views.

In any case, the .NET data provider is available for download. as well as a DDEX provider.

SubSonic

Probably the MVP in my .NET development toolbox at the moment. SubSonic generates a full DAL based on an existing database, provides Rails-like scaffolds and provides other helpful controls and utilities. Supports SQL Server 2000 or 2005, MySQL, or Oracle (with SQLLite, SQLCE, and PostGres coming soon!).

ActiveRecord

An implementation of the ActiveRecord pattern by the Castle Project, built on top of NHibernate.