They are somewhat similar, and can be used in a
very similar way, code-wise, but they have some important differences.
Note that "LINQ" is not the same thing as "LINQ to SQL"; the EF also
uses LINQ. Some notable differences are:
- LINQ to SQL is largely SQL Server only, not so much by design as by
implementation. The EF is designed to support, and does support,
multiple DBs, if you have a compatible ADO.NET provider.
- Out of the box, LINQ to SQL has a very poor story for DB metadata
changes. You have to regenerate parts of your model from scratch, and
you lose customizations.
- The EF supports model features like many-to-many relationships and inheritance. LINQ to SQL does not directly support these.
- In .NET 3.5, LINQ to SQL had much better support for
SQL-Server-specific functionality than the EF. This is mostly not true
in .NET 4; they're fairly similar in that respect.
- The EF lets you choose Model First, DB First, or Code First
modeling. LINQ to SQL, out of the box, really only supports DB First.