Почему я должен использовать Платформу Объекта по Linq2SQL

Чтобы быть ясным, я не прошу рядом сравнение, которое уже спросили Ad Nauseum здесь на ТАК. Я также Не спрашиваю, мертв ли Linq2Sql, поскольку я не забочусь. То, что я спрашиваю, является этим....

Я создаю внутренние приложения только для некоммерческой организации. Я - единственный штатный разработчик. Мы ВСЕГДА используем SQL Server в качестве нашего бэкенда Базы данных. Я разрабатываю и создаю Базы данных также. Я уже использовал L2S успешно пару раз.

При принятии всего этого во внимание кто-то может предложить мне неопровержимый довод для использования EF вместо L2S?

Я был в Лагере Кода в эти выходные и после демонстрации один час длиной на EF, все из которых я, возможно, сделал в L2S, я задал этот тот же вопрос. Ответ динамиков был, "L2S мертв..." Очень хорошо затем! НЕТ! (см. здесь),

Я понимаю, что EF - то, что MS ХОЧЕТ, чтобы мы использовали в будущем (см. здесь), и что это предлагает намного больше опций настройки. То, что я не могу выяснить, - то, если какое-либо из этого, или делает, должен иметь значение для меня в этой среде.

Один конкретный вопрос, который мы имеем здесь, - то, что я наследовал Базовое приложение, которое было основано на 4 различных Базах данных SQL. L2S испытывает большие трудности с этим, но когда я спросил вышеупомянутый динамик, если EF поможет мне в этом отношении, он сказал "Нет!"

9
задан Refracted Paladin 13 April 2010 в 12:24
поделиться

10 ответов

С EF вы получаете слой сопоставления (т.е. ваши сущности) между вашими объектами класса и вашими таблицами базы данных. Если вам нужна такая гибкость или вы предпочитаете модель , ориентированную на предметную область, (в отличие от дизайна, управляемого таблицами), возможно, стоит подумать о EF. Linq to SQL - это в значительной степени преобразователь классов в таблицы.

8
ответ дан 4 December 2019 в 08:32
поделиться

Entity Framework имеет лучшую совместимость, если вы ожидаете, что ваше приложение будет масштабироваться на других СУБД, это одно из его основных преимуществ.

Entity Framework будет работать на СУБД, отличных от Microsoft SQL Server, таких как Oracle, MySQL и т. Д.

В то время как Linq ограничивается MS SQL Server.

0
ответ дан 4 December 2019 в 08:32
поделиться

Ну, в конце концов, зависит от реквизитов.

Теперь вы используете linqtosql, и он вам подходит, но, возможно, однажды у вас появятся более сложные требования, которые вы сможете лучше согласовать с EF. Например, используя скорость или что-то еще.

0
ответ дан 4 December 2019 в 08:32
поделиться

Я и сам часто задавался этим вопросом, поскольку EF кажется намного сложнее L2S. Поскольку MS активно развивает EF, в EF 4 есть некоторые новые аспекты, которые, возможно, стоит проверить. В блоге команды ADO.NET есть хорошее резюме, в котором описывается, как API для EF развивается, чтобы поддерживать более широкий спектр моделей разработки.

В частности, я лично заинтересован в поддержке POCO и паттерна репозитория, поскольку они хорошо подходят для проектов, над которыми я работаю. На мой взгляд, одной из веских причин для использования того или иного провайдера является то, насколько легко в будущем можно будет перейти на совершенно другого провайдера (разумеется, не переделывая весь код приложения). Я считаю, что L2S не хватает в этом отношении (во всяком случае, из коробки), и я рад видеть изменения в EF 4. Пока, однако, я только читал об этих изменениях в EF 4, поэтому не могу сказать, насколько хорошо они работают на практике.

4
ответ дан 4 December 2019 в 08:32
поделиться

EF представляет собой комплексную ORM, в которой ваша объектная модель значительно отличается от вашей схемы БД. L2S больше нацелен на то, чтобы быть быстрым генератором DAL.

Проблема в том, что EF - посредственная ORM, а L2S - действительно отличный генератор DAL.

Я бы сказал, если L2S соответствует вашим потребностям, оставайтесь с ним и не позволяйте маркетингу MS подталкивать вас. Если L2S не выполняет то, что вам нужно, и вам нужно оставаться в продуктах Microsoft, выбирайте EF. Если у вас есть немного свободы в отношении вашей технологии, посмотрите NHibernate и LLBGen (я думаю, оба лучше, чем EF)

3
ответ дан 4 December 2019 в 08:32
поделиться

Я переключился с Linq2Sql на Entity Фреймворк некоторое время назад для всех моих проектов. Изначально это был шаг назад в нескольких отношениях - выражения даты, которые отлично работали в Linq2Sql, не работали в EF, и не было возможности отложенной загрузки. Но теперь с Entity Framework 4 все работает гладко.

Если это только вы, и у вас нет времени на изучение EF, придерживайтесь Linq2Sql. Но если у вас есть время и вы думаете, что в конечном итоге вам могут потребоваться другие формы наследования, кроме -per-table или любой другой функции EF, дерзайте!

И причина №1, по которой вам следует сделать переход: опыт Entity Framework будет хорошо смотреться в вашем резюме!

0
ответ дан 4 December 2019 в 08:32
поделиться

L2S допускает неявную отложенную загрузку, в то время как EF имеет явную отложенную загрузку. В небольшом проекте неявная работа, выполняемая в L2S, безусловно, хороша и хороша для быстрой разработки и изменения модели, но в более крупных проектах разработчикам может потребоваться больший контроль над тем, какие ресурсы базы данных вызывает приложение.

См. http://www.singingeels.com/Articles/Entity_Framework_and_Lazy_Loading.aspx

0
ответ дан 4 December 2019 в 08:32
поделиться

Я задал себе этот вопрос, когда впервые увидел EF и уже написал большое приложение на Linq2Sql. Самое большое изменение сделано в слое сопоставления объектов. В EF отношения и навигация управляются за вас. Итак, если у меня есть две таблицы, которые имеют отношения внешнего ключа (например, Pets и Owners), я могу сделать

pet.owner

, тогда как в L2S мне пришлось бы самому написать запрос соединения. Сопоставления «многие ко многим» обрабатываются легко, поскольку если у вас есть «чистая таблица соединений» (то есть таблица с двумя внешними ключами и без других данных), то эта таблица не представлена ​​в сопоставлениях объектов.

Вы также можете справиться с нетерпеливой / ленивой загрузкой самостоятельно.

Я также могу разрабатывать в POCO, поэтому я не привязан напрямую к фреймворку, т.е. мне не мешает весь шум типов L2S или EF, это упрощает тестирование.

В целом я предпочитаю EF, но YMMV

1
ответ дан 4 December 2019 в 08:32
поделиться

Они оба очень глючны. Я обнаружил 8 ошибок в Entity Framework с тех пор, как начал использовать его месяц назад (две затрагивают L2S, по крайней мере три все еще присутствуют в EF4). Это был один из самых болезненных переживаний в моей жизни.

Разделение классов и таблиц было бы действительно хорошим, если бы EF работал так, как они хотели.

2
ответ дан 4 December 2019 в 08:32
поделиться

Основная причина не для использования Linq2SQL заключается в том, что он имеет существенный недостаток имплицитного дизайна:

Рекомендуемая передовая практика для использования DataContext - его использование в недолговечный стиль «единицы работы». Отлично, за исключением того, что это умеренно дорогой объект, который нужно создавать и утилизировать в первую очередь.

Загвоздка возникает, когда вы хотите десериализовать или воссоздать объект (возможно, из отправленной веб-страницы), а затем обновить существующую запись. Метод Attach, предлагаемый Linq-to-sql, принимает только следующие три сценария:

  1. Вы реализуете временные метки для всех ваших таблиц.
  2. Вы повторно выбираете объект, который хотите изменить, затем меняете его и отправляете.
  3. У вас волшебным образом просто все еще есть оригинальная версия объекта.

Первый сценарий требует изменения базы данных, что для некоторых сред неприемлемо. Второй сценарий крайне неэффективен - зачем извлекать данные, которые у вас уже есть? Третий сценарий нереалистичен - веб-приложения без сохранения состояния обычно не сохраняют историческую информацию.

Дело в том, что ... EF4.0 позволяет вам повторно присоединить объект к ObjectContext и пометить его как добавленный или новый, и контекст соответственно сгенерирует правильный оператор INSERT / UPDATE.

7
ответ дан 4 December 2019 в 08:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: