1. Writing a new MVC application: What to use for persistence?

    So I’m writing a new personal “for fun” application and I really can’t decide on what to use for the persistence layer. I on the one hand I love NHibernate (I can’t get enough of Oren Eini’s blog on the matter http://ayende.com/Blog/), personally I don’t mind the Entity Framework from MS, you have to give a little love but it does work. I’ve also been reading with much interest about CouchDB which I really want to take for a spin and would really fit with the nature of the application I’m writing.

    There are a couple of libraries that might help grease the wheels between CouchDB and .net, Företagsplatsen has a nice library called Divan which offers a pretty good .net wrapper around the CouchDB API. SineSignal has created a library called Ottoman which is in the way early stages (pre-alpha) but looks really promising.

    As a side note Ayende has created his own document database called DivanDB (not to be confused with the Divan CouchDB wrapper mentioned above) which would be a .net / LINQ-ified database comparable to CouchDB. I’m not sure where he’s going with it so I don’t think I would use it for this project

    As a result I am going to hold off on this decision until much later. For now I will write persistence using the Repository model and implement a HashTable to store my development data, I see it as a great opportunity to really separate the model / persistence concerns.

    I can see one impact that this indecision will have and that is the developing the Model. Should I choose to go with NHibernate then I need to make all properties virtual. The Entity Framework required specific classes for related entities. CouchDB seems like it would work best with a superclass that implements a guid ID (Primary Key equivalent) and string Revision number. To handle this I will create a common superclass that may have nothing declared for right now and make my properties virtual anyway. Should I choose to implement Entity Framework I will have to go back and redefine the related entities.

    Which persistence layer do you prefer?