Actually, they don’t except in one very important way. Because they’re so damn easy to work with I now find it incredibly tedious to work with Entity Framework or NHibernate at all! As I sit and build models and then go through the pain of (in the case of NHibernate) xml mapping files or thinking about this property mapping to that column, specifying keys, lazy or eager fetching, code based migrations and scripts, I just want to shout “WTF! End this madness!”.
If you’ve never played with one, I say go and do it now. Nothing highlights the object-relational impedance mismatch more. As a .Net dev I recommend RavenDB just for its transaction support alone because, more than likely, in enterprise shops that will be very important, but I am a massive fan of MongoDB too (and it’s free!). Whatever, go learn one and then go back to trying to make your OO model conform to a relational schema and tell me it’s better. If you take away scalability, the primary reason NoSql databases are touted as being good for, and just appreciate it for how simple it makes your life with regards to persistence, then I wouldn’t be surprised at all if you wanted to ditch your relational database too.
In terms of domain models I see the likes of RavenDB and MongoDB as the natural choice but at the same time I appreciate the power of SQL databases as being well suited to reporting data and there’s no reason why the two couldn’t co-exist together. They each solve a different problem well. I have a feeling that as they begin to gain more traction we might well see this as the preferred approach because from a productivity point of view I cannot think of a faster way to build an application, and if we can build applications faster and remove pain and friction from our daily development lives then both we and the business are happy. It’s a win-win situation. I’m so looking forward to that day.