Я работаю для клиента, у которого есть большой проект, использующий Linq-to-SQL. Когда проект начинался, это был очевидный выбор, потому что в Entity Framework в то время отсутствовали некоторые основные функции, а производительность Linq-to-SQL была намного лучше.
Теперь EF эволюционировал, и в Linq-to-SQL отсутствует асинхронная поддержка, которая отлично подходит для сильно масштабируемых сервисов. Иногда у нас более 100 запросов в секунду, и, несмотря на то, что мы оптимизировали наши базы данных, большинство запросов все еще занимает несколько миллисекунд. Из-за синхронных вызовов базы данных поток заблокирован и недоступен для других запросов.
Мы собираемся перейти на Entity Framework, исключительно для этой функции. Жаль, что Microsoft не внедрила асинхронную поддержку в Linq-to-SQL (или с открытым исходным кодом, чтобы сообщество могло это сделать).
Приложение, декабрь 2018 года: Microsoft движется в направлении .NET Core, а Linq-2-SQL не поддерживает .NET Core, поэтому вам нужно перейти на EF, чтобы убедиться, что вы можете перейти на EF .Core в будущем.
Есть также несколько других вариантов, таких как LLBLGen . Это зрелое ORM-решение, которое существует уже долгое время и оказалось более перспективным, чем решения для данных MS (ODBC, ADO, ADO.NET, Linq-2-SQL, EF, EF.core).