Он не умер, но Microsoft сейчас сосредоточена на Entity Framework.
Я использовал LINQ to SQL в небольших проектах, и он довольно удобен как легкий слой данных, и я хотел бы рассмотреть его снова в проектах аналогичного размера. Сама реализация LINQ действительно хороша и до недавнего времени была намного лучше, чем проект NHibernate LINQ. В более крупном проекте, в котором я использовал L2S, мне было трудно придумать шаблон единицы работы, который меня устраивал, из-за ограничений класса L2S 'DataContext'. Попытка реализовать что-то вроде «Session per request» в L2S кажется очень сложной или невозможной.
Я также не стал бы рассматривать L2S как истинный ORM, поскольку он действительно не дает вам много вариантов отображения. Ваш дизайн класса действительно должен следовать вашей схеме базы данных (таблица на класс), иначе он будет бороться с вами на каждом этапе пути. Еще одна вещь, которая мне не нравится в L2S, это необходимость использования определенных типов ( EntitySet
и EntityRef
) для обработки коллекций, ссылок и отложенной загрузки. Это означает, что невозможно поддерживать независимость ORM вашей доменной модели без добавления еще одного уровня абстракции.
Моя другая проблема с L2S - единственная зависимость от LINQ для генерации запросов. Поставщик LINQ очень хорошо написан и обычно создает достойный SQL для большинства запросов, но у меня есть опасения, что есть более сложные запросы, которые не могут быть хорошо выражены с помощью LINQ. Используя L2S, вам в основном приходится возвращаться к вызову хранимых процедур в этих случаях, в то время как (например) NHibernate имеет несколько API-интерфейсов (поставщик LINQ, QueryOver, HQL и т. Д.), Которые можно использовать, когда вам нужен больший контроль над сгенерированным SQL.
В защите L2S над NHibernate намного меньше накладных расходов на его запуск и запуск в проекте.