LINQ to SQL мертв?

17

Есть ли причина продолжать использовать Linq для SQL, или лучше перейти на методы ORM, такие как EF, NHibernate и т. Д.

Мы используем Linq to SQL в новом крупном корпоративном приложении, которое будет существовать долгое время. Мотивация для этого нового корпоративного приложения состоит в том, что приложение было написано на Visual Basic, и поскольку Microsoft прекратила поддержку, мы были вынуждены переписать приложение. Кажется, что мы уже там, но на этот раз с нашим DAL (Уровень доступа к данным).

Я уже читал эту статью , но она сравнится только со слабостью EF.

Амир Резаи
источник
+1 замечательно. Это меня поразительно, я старался переместить свои хранимые процедуры и параметризованные строки SQL-запросов в LINQ to SQL для улучшения читабельности, я понятия не имел, что он больше не разрабатывается.
fearoffours
В MS есть небольшой тип слайд-шоу .NET 4, в котором говорится, что он не мертвый, но это может означать много вещей. Они действительно улучшили его в .NET 4.0: damieng.com/blog/2009/06/01/linq-to-sql-changes-in-net-40
MetalMikester
Не снова. Этот вопрос обсуждался до тошноты на StackOverflow. Можете ли вы сказать FUD?
Роберт Харви

Ответы:

11

Если вы уже используете его и не столкнетесь с какими-либо трудностями, я бы остановился на существующих проектах.

Linq2SQL - это довольно приятный, но ограниченный ORM - если вы хотите отобразить ваши объекты более сложными способами, чем базовые, предоставляемые Linq2SQL, то вы застрянете. Microsoft действительно исправила несколько ошибок, когда вышла с .net 4, но заявила, что не собирается выделять ресурсы на ее расширение.

Я бы сказал, что если у вас довольно простой проект, который может иметь ограниченный срок службы, то Linq2SQL - это неплохой легкий вариант, если вы будете осторожны, чтобы не повредить зависимости от Linq2SQL повсюду. Для чего-то большего я бы пошел с чем-то другим (например, с NHibernate или EF), поскольку Linq2SQL в значительной степени является тупиком.

FinnNk
источник
Я могу только согласиться, не совсем мертвый, но он находится на столе в сортире в некотором роде. Если что-то работает, и это очень важно изменить сейчас ... ну, вы, возможно, захотите немного откинуться на спинку кресла и поискать подходящее время для преобразования в EF / NHibernate, это может быть финансируемый проект обновления (в конце концов, мы все хотят работу, хлеб с маслом на столе).
кибернетизировано
@cyberzed: звучит как хорошее оправдание ненужной работы.
Роберт Харви
12

Он не умер, но 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 намного меньше накладных расходов на его запуск и запуск в проекте.

richeym
источник
2

Он не умер, так как он все еще работает, но если он не будет развиваться дальше, тогда имеет смысл перейти к чему-то другому.

Однако, если это работает для вашего приложения, нет смысла вносить изменения ради изменений.

ChrisF
источник
2

более стабильный, чем мертвый imho:

http://www.thinqlinq.com/default/LINQ-to-SQL-enhancements-for-2010.aspx

http://jonkruger.com/blog/2009/06/06/linq-to-sql-is-not-dead/

Они перенесли свои усилия по улучшению в Entity Framework, где это действительно необходимо для успеха этого продукта. Не ожидайте ничего нового, но совместимость и исправление ошибки на linq2sql некоторое время.

Этот сайт работает с большим количеством linq2sql, если я не ошибаюсь.

Билл
источник
+1 за "стабильный" Лучший способ просмотра L2S, имхо. Стабильный и больше не расширяется / не меняется.
Квентин Старин
Извините, но "ничего нового, кроме совместимости и исправления ошибок", означает, что он содержится. Это в основном гарантия того, что сообщество отойдет от этого, вы не увидите много новых проектов, использующих его, и, вероятно, вы также не захотите использовать его в новых проектах. «Мертвый» не означает, что он не работает, это просто означает, что мало инноваций или интереса.
Джереми
С точки зрения крупного предприятия тот факт, что ядро ​​больше не изменяется, означает, что он может, наконец, войти в список утвержденных методов во многих случаях. В моей работе мы долго этого ждали. EF все еще остается нестабильным, и L2S всегда будет привлекать интерес в ситуациях, когда издержки EF не нужны.
Билл
@ Джереми Люди все еще используют TeX?
альтернатива
1

Это странно, но я много раз видел это («LINQ2SQL мертв»), и я не уверен, откуда это *. Это как мертвая Windows XP. Microsoft прекратила поддержку и создала что-то новое (и, на мой взгляд, лучше), но люди все еще могут свободно использовать XP, так же как они могут свободно использовать Linq2SQL. Правда, я использую Linq2SQL при создании пользовательских модулей DotNetNuke. Тем не менее, с новыми функциями в EF4, такими как разработка кода сначала ( http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx ) трудно найти причины придерживаться Linq2SQL. Я не вижу причин для обновления и обновления кода, но для нового кода я не знаю, почему вы не захотите использовать EF4.

* Честно говоря, я очень ... одержим семантикой! Прошу прощения, если это раздражает окружающих :)

Jetti
источник