The answers here have covered many of the differences between Linq2Sql and EF, but there's a key point which has not been given much attention: Linq2Sql only supports SQL Server whereas EF has providers for the following RDBMS's:
Provided by Microsoft:
- ADO.NET drivers for SQL Server, OBDC and OLE DB
Via third party providers:
- MySQL
- Oracle
- DB2
- VistaDB
- SQLite
- PostgreSQL
- Informix
- U2
- Sybase
- Synergex
- Firebird
- Npgsql
to name a few.
This makes EF a powerful programming abstraction over your relational data store, meaning developers have a consistent programming model to work with regardless of the underlying data store. This could be very useful in situations where you are developing a product that you want to ensure will interoperate with a wide range of common RDBMS's.
Another situation where that abstraction is useful is where you are part of a development team that works with a number of different customers, or different business units within an organisation, and you want to improve developer productivity by reducing the number of RDBMS's they have to become familiar with in order to support a range of different applications on top of different RDBMS's.