Entity Framework 4 и LINQ to SQL для небольших или средних приложений, работающих с SQL Server

Я видел некоторые дискуссии о L2S против EF4 на переполнении стека еще в апреле, когда был запущен VS2010, а именно:

Дамп Linq-To-Sql теперь, когда выпущена Entity Framework 4.0?

Может ли платформа Entity Framework перейти на новое небольшое приложение?

Теперь, через 6 месяцев, предположительно, люди больше взаимодействовали с EF4, поэтому мне любопытно новых мнений, особенно при рассмотрении работы только с SQL Server.

Я часто использовал LINQ to SQL и немного играл с EF4. Я бы не прочь вскочить и узнать больше EF4, я не уверен, что это стоит дополнительной сложности, если мое приложение только собирается поговорить с SQL Server.

Итак, если у вас был некоторый опыт работы с обоими, и сегодня вы должны начать новое приложение для малого или среднего размера с помощью серверной части SQL Server, какой из них вы бы выбрали?

И, конечно, почему...

Ответы

Ответ 1

Это зависит...:)

Если вам не нужны какие-либо дополнительные функции, добавленные EF, L2S обычно:

  • с легкостью начать работу и работать с ней,
  • делает более простые переводы из запросов Linq в TSQL и поддерживает перевод более простых .net-методов в TSQL, тогда как L2E полагается на "специальные" методы для таких вещей, как сопоставление даты и времени и т.д.,
  • и имеет меньшие издержки во время выполнения из-за прямого сопоставления 1:1 между таблицами и классами сущностей.

EF добавляет дополнительные функции, такие как поддержка других RDBMS и более сложное отображение, чем обычный 1:1, поддержка нескольких разных типов наследования объектов и т.д. Это связано со стоимостью:

  • служебные данные во время выполнения выше, чем для L2S,
  • Написание запросов linq к EF несколько более вероятно приведет к выражениям, которые не могут быть переведены в TSQL из-за использования неподдерживаемых методов CLR или для использования специальных методов L2E и
  • может потребоваться немного больше времени, чтобы получить голову вокруг моделей EF, чем модели L2S, из-за двух слоев (модель хранения и концептуальная модель) и сопоставлений между ними. Ручная настройка файла модели в редакторе xml не является чем-то необычным.

Короче:

  • Если ваше приложение достаточно простое, вы требуется только поддержка SQL Server и ваша схема/модель данных db чиста достаточно, чтобы вам не нужно было делать больше расширенное отображение, то L2S - отличный выбор. Хотя маловероятно, что MSFT добавит новые новые функции к этому, это действительно не нужно. Он отлично работает и решает проблема, которую она должна решить. Многие приложения и веб-сайты (включая этот) отлично работают на L2S.
  • Если вам нужно поддерживать другие БД чем SQL Server, или если ваш db схема не соответствует объекту модель, которую вы хотите, или вам нужны другие "большие" функции от EF, тогда вы следует использовать EF.

Ответ 2

Компания, над которой я работаю, - это компания по производству солнечной энергии от 2,5 до 3,0 млрд долларов. Мы используем L2S для всех наших производственных приложений следующего поколения. Он не без бородавок, но мы нашли его быстрым (вопреки тому, что многие думают), ловким и очень легким для работы. Мы не сожалеем. Он делает все, что нам нужно.

Ответ 3

Nhibernate. Или BLToolkit для особых случаев. Linq2Sql и EntityFraemwork по-прежнему являются поколениями.

Ответ 4

По-моему, будущее LINQ To SQL немного неясно. Я бы лично пошел с Entity Framework, поскольку он обеспечивает максимальную гибкость и, как представляется, Microsoft направляет внимание на их будущее развитие. Я использую Entity Framework, и, хотя у него есть некоторые причуды, я был доволен им по большей части.

Ответ 5

Я бы пошел с Entity Framework практически в любом случае. Самый большой недостаток - есть небольшой способ настроить/улучшить свою модель, когда вы идете вживую, не дуя и не восстанавливая. Это и EF могут делать все, что вы могли бы сделать с помощью l2s и более, имея лучшие инструменты и т.д.