I'm wondering what the best feature(s) of the orm framework you use and what features you find yourself using most?
What is the reason you chose the framework you use?
I'm just trying to compare them and wondered if any offers advantages over the other. (it's all very well googling this but you can't beat first hand user experiences!)
Specifically I'm looking for a .Net framework but still curious about ORM/features in other langauges.
Thanks in advance!
I use empire-db by Apache.
The main reason is that I get rid of XML or annotations for defining database schemes. I really hate shifting complexity from coding to configuring having to cope with trillions of xml configuration files and - even worse - distributed configuration using annotations.
I wrote my own ORM. Features include:
Machine-generated code for each table, based on abstract table definitions
A library/framework, which acts on the table definitions and the run-time data, in order to implement ueful functions like:
I didn't want to use an existing ORM, because I feared that I might sooner or later find that it did't implement some feature that I wanted, and that I'd then find it difficult to add that feature.
I wanted to use an ORM, because I didn't want to write and maintain code for each individual table.
I've wrote my ORM because it works with .NET Compact Framework on devices as well as with full .NET Framework without recompilation.
It does not require from class to be inherited from specified base type or implement any kind of interface.
It supports nested transaction scopes that are not presented in .NET Compact Framework.
It allows me to create data access layer with domain model can be used both on device and on desktop or web application without cross-compilation or duplication.
I wrote Object Data Blocks to offer the following outstanding features
Its best summed up as an object persistence style ORM.
We just recently went through the process of deciding between Entity Framework and NHibernate. Although my initial propensity was to lean towards NHibernate, given that Microsoft's track record of actually sticking with a technology has been less than stellar here in the past few years (ex: Linq To SQL, dead at version 1, or for a more recent example were MS decided to ditch ASP.NET Ajax Library client templates, check this), we still decided to go with Entity Framework.
We chose it for the following reasons:
Whether or not going with Entity Framework was the right choice remains to be seen. There's always the chance that Microsoft could pull another "Linq To SQL" and say, "Hey, we're throwing away Entity Framework, sorry about that, you should have gone with NHibernate". But we decided that since it is on 2.0 now with VS 2010, there's at least a good chance that it's going to be around for a few years.
So even though we liked NHibernate's proven track record much better than Entity Framework's, we went with Entity Framework for the reasons I mentioned above.
I think you just have to look at the pros and cons of each tool, examine all the options, and try to make the best decision you can.
I would say Linq support is the killer ORM feature for me. Right now, writing Linq queries against a database requires an ORM. Linq gives me compile time static type checking against the database in my queries, which now gives me compiler errors in some scenarios where the code and database are out of sync. I tend to work on databases that change a lot (agile) and work with teams of developers where database schema updates can come from any team member.
There are plenty of other questions and answers on this topic:
NHibernate, Entity Framework, active records or linq2sql