Daniel Simmons just posted a great article comparing the Entity Framework to some other available options to .NET developers (ADO.NET, LINQ To SQL, NHibernate). While the entire write-up is really good, I think his concluding sentence sums it up really nicely: “The EF is not just an ORM–it’s the first step in a much larger vision of an entity-aware data platform.”
That’s the point I always try to make clear when speaking with people about the Entity Framework. The EF vs. NHibernate argument doesn’t really make sense because they aren’t 1:1 technologies, and have significantly different goals in the long-term. Is NHibernate a more mature ORM today? Yes, of course it is, because it’s been around a lot longer. Does EF provide a very strong ORM as well as a rich modeling tool that can be leveraged in numerous scenarios and continue to return on it’s investments? Yes, I’d like to think so.
If I decide to adopt the EDM as my application modeling/mapping tool, not only can I begin consuming it in my applications using the EF, but I can then expose it over the web using ADO.NET Data Services, and I can also build on top of it to create an ASP.NET Dynamic Data application (or enhance an existing WebForm application with Dynamic Data behavior). As of the release of .NET 3.5 SP1, you already have three compelling scenarios that leverage your single EDM. Moving forward you can imagine that list of EDM consumers will grow significantly.
Keep in mind that both ADO.NET Data Services and ASP.NET Dynamic Data are not coupled to the Entity Framework, but they provide first-class support for it out of the box, which makes the integration between them very strong. For instance, if using an EDM as the data source for an ADO.NET Data Service, the model has clear definitions as to what each entity type’s key is (where it’s a composite or singluar key) built-in, so you don’t have to do anything extra to instruct the data service. If you’re using any other data source, your entity type’s key properties have to abide by a specific criteria, which could include you having to salt them with a specific attribute.