Choosing between ADO.NET Entity Framework and LINQ to SQL
As part of my day to job I come across a very common question from the developer community that one should be using LINQ to SQL (L2S) or ADO.NET Entity Framework (EF).
Earlier I have posted a blog containing the features http://blogs.msdn.com/wriju/archive/2009/01/05/choosing-between-linq-to-sql-and-entity-framework.aspx.
To me I feel very excited about EF as it has got more power and capability than L2S. L2S was important for us to understand the new era of Object Relational Model (ORM) with native programming language querying (LINQ) capabilities. But going forward EF is the technology you should be focusing on.
There has been another concern comes from dev community is that is LINQ to SQL going to retire? Answer to that is no. Microsoft will continue to support L2S and enhance based on customer feedback. Tim Mallalieu clearly have mentioned in his Post that Microsoft will heavily invest into EF and the most wanted features like POCO will be with .NET 4.0.
EF is the recommended data access solution while accessing data using LINQ. LINQ to SQL will also be there.
So when the question arises what to choose? Go ahead and plan for Entity Framework. I would like to share some of my thoughts around it,
Why I should use Entity Framework?
Ø It simplifies the data access and allows me to create conceptual model required for my business.
Ø EF allows you to handle Many to Many relationship without extra join.
Ø Map related tables into single entity to reduce code complexity.
Ø Strong inheritance supports for (Table per hierarchy, subclass and concrete type)
Ø Consolidation for complex object is very easy.
Ø It has powerful query mechanism through EntitySQL. For them who do not like LINQ you can use EntityClient provider with EntitySQL.
Ø You can expose your modeled data through ADO.NET Data Services (Astoria).
Ø Database independent and based on standard ADO.NET Providers.
Ø There are many third party providers currently available.
o Devart offers provider for Oracle, MySQL and PostgreSQL
o Phoenix Software Solution offers EF provider for SQLite.
o Npgsql offers another provider for PostgreSQL.
o OpenLink Software offers a very wide range of support for Oracle (versions 7.x to 11.x), Microsoft SQL Server (6.x to 2005), IBM DB2 , Sybase (4.2 to 12.x+), IBM Informix (5.x to 11.x), Ingres (6.4 to 9.x), Progress (7.x to 10.x), MySQL, PostgreSQL, and Firebird
o Sybase SQL Anywhere provides support for SQL Anywhere.
o IBM natively supports databases like DB2, Informix and U2.
Ø <TODO: will add few more as and when come across>
At the end of the story I still feel good about LINQ to SQL when it comes to smaller applications with less complexity. Entity Framework is capable of handling large enterprise applications and will have more power in v2 (in .NET 4.0). So if you are targeting your application for multiple databases the L2S is not the right choice for you.
My vote is for ADO.NET Entity Framework. You will enjoy with the conceptual model and Astoria.