Je travaille pour un client qui a un grand projet qui utilise Linq-to-SQL. Lorsque le projet a démarré, c'était le choix évident, car Entity Framework manquait à l'époque de fonctionnalités majeures et les performances de Linq-to-SQL étaient bien meilleures.
Maintenant, EF a évolué et Linq-to-SQL manque de prise en charge asynchrone, ce qui est idéal pour les services hautement évolutifs. Nous avons parfois plus de 100 requêtes par seconde et malgré l'optimisation de nos bases de données, la plupart des requêtes prennent encore plusieurs millisecondes. En raison des appels de base de données synchrones, le thread est bloqué et n'est pas disponible pour les autres demandes.
Nous envisageons de passer à Entity Framework, uniquement pour cette fonctionnalité. Il est dommage que Microsoft n'ait pas implémenté la prise en charge asynchrone dans Linq-to-SQL (ou open source, afin que la communauté puisse le faire).
Addendum décembre 2018: Microsoft évolue vers .NET Core et Linq-2-SQL n'est pas pris en charge sur .NET Core, vous devez donc passer à EF pour vous assurer de pouvoir migrer vers EF.Core à l'avenir.
Il existe également d'autres options à considérer, telles que LLBLGen . C'est une solution ORM mature qui existe déjà depuis longtemps et qui s'est avérée plus pérenne que les solutions de données MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).