Estou trabalhando para um cliente que possui um grande projeto que está usando o Linq-to-SQL. Quando o projeto foi iniciado, era a escolha óbvia, porque o Entity Framework estava ausente de alguns dos principais recursos da época e o desempenho do Linq-to-SQL era muito melhor.
Agora, a EF evoluiu e o Linq-to-SQL não possui suporte assíncrono, o que é ótimo para serviços altamente escalonáveis. Às vezes, temos mais de 100 solicitações por segundo e, apesar de otimizarmos nossos bancos de dados, a maioria das consultas ainda leva vários milissegundos para ser concluída. Devido às chamadas síncronas do banco de dados, o encadeamento está bloqueado e não está disponível para outras solicitações.
Estamos pensando em mudar para o Entity Framework, exclusivamente para esse recurso. É uma pena que a Microsoft não tenha implementado o suporte assíncrono no Linq-to-SQL (ou de código aberto, para que a comunidade possa fazê-lo).
Adendo dezembro de 2018: A Microsoft está migrando para o .NET Core e o Linq-2-SQL não é compatível com o .NET Core; portanto, você precisa migrar para o EF para garantir a migração para o EF.Core no futuro.
Também há outras opções a serem consideradas, como o LLBLGen . É uma solução ORM madura que já existe há muito tempo e foi comprovada como mais à prova do futuro do que as soluções de dados da MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).