Линк против MS Enterprise Library DAAB - PullRequest
3 голосов
/ 26 июля 2010

На работе мы только что обновились с VS2005 до 2010. До этого момента мы использовали только sprocs (я думаю, по привычке больше всего) Я играл с Linq (очень простые уроки - ничего особенного). Как первый опыт работы с ORM, мне это нравится.

Кроме того, я только недавно познакомился с блоками Enterprise Library. Вообще говоря, будет ли проект использовать либо ORM, либо DAAB, или проект / потенциально может использовать оба? Зависит ли это от ситуации или просто от предпочтения? Есть ли случаи, когда один вариант лучше другого?

Спасибо.

Ответы [ 3 ]

2 голосов
/ 26 июля 2010

Мы находимся в той же точке, использовав DAAB с 2.0 до 4.1.FWIW это наше мышление (мы на самом деле Pro ORM):

Существует компромисс между:

  • улучшениями производительности, которые дает ORM с возможностями генерации кода (в частности, не имеяпередать код SProcs и сущности)
  • улучшенная гибкость, которую дает LINQ при быстрой и ленивой загрузке, выборка только необходимых столбцов (узость запроса позволяет улучшить попадания в индексы NC и Covering и т. д.)
  • насколько мы можем судить, LINQ использует параметризованные запросы и, следовательно, производительность по отношению к кэшу плана и не подвержен атакам SQL-инъекций http://msdn.microsoft.com/en-us/library/bb386929.aspx

Однако, с другой стороны,

  • Потеря контроля над сущностями - они не обязательно являются POCO (для LINQ2SQL), и хотя EF4 допускает ваши собственные POCO, а ленивая загрузка все еще достижима с помощью прокси.
  • Отсутствие контроля / детерминизма в запросах, которые может быть выполнено с БД, что означает, что тестирование покрытия на БД является потенциальной проблемой(хотя определить стратегию индексации для SPROC относительно просто)
  • Если вы не будете осторожны, обновление графов сущностей может иметь непреднамеренные последствия "глубины".LINQ2SQL действительно может сделать аналог «SavesWith» с энергичной загрузкой «LoadsWith»

Итак, мы довольны ORM для около 80% наших таблиц / сущностей, но затем посмотрим назаказная работа для действительно чувствительных, специфичных для исполнения вещей.

HTH

1 голос
/ 26 июля 2010

DAAB тесно связан со старым стилем доступа к базе данных (например, DataSets), в то время как современные ORM, такие как Linq, больше относятся к строго типизированным объектам, сгенерированным из схемы базы данных.

Я бы предложил только использовать DAABесли вам нужна нейтральность базы данных (IIRC хорошо подходит для использования с различными типами СУБД) и если вы хотите избежать инструментов, которые сильно зависят от магии времени компиляции.

ORM обычно довольно хороши в предоставлении ценностив виде простоты использования и поддержки инструмента.Однако они часто сталкиваются с «несоответствием объектно-реляционного импеданса», когда объекты выглядят и ведут себя как стандартные объекты на поверхности, но к ним предъявляются далеко идущие требования, поскольку они абстрагируют СУБД, которая не являетсядействительно совместим с объектно-ориентированными вычислениями.Ваш код должен «знать», как их использовать, иначе он может столкнуться с ловушками, которые вы не можете поймать во время компиляции.

Лично я бы избегал DAAB.Помимо нескольких ярких примеров (Unity!) EL довольно тяжеловесен и требует значительного объема работы для понимания и правильного использования.Это часто гусеничный молоток на гусеничном ходу, где должно работать зубило.Большинство ORM чертовски хороши, за исключением недостатков.Linq to Sql тверд, и EF4 добирается туда.Существуют также альтернативы с открытым исходным кодом, такие как nHibernate, которые также обеспечивают хорошее значение для кривой обучения.

Если бы я завтра начал новый проект, я бы использовал EF4-первые биты кода которые были выпущены недавно.Я думаю, что это главным образом потому, что я обжорство для наказания;EF4 был боль в моей заднице ...

1 голос
/ 26 июля 2010

Один или другой ... Я некоторое время не использовал DAAB, но LINQ to SQL или ADO.NET EF использует конструктор для генерации классов кода, представляющих базу данных, где DAAB построен на ADO.NET (DataSet и т. Д.).

Мне нравится LINQ, он прост в использовании, вы можете просто использовать хранимые процедуры для получения ваших данных или создать запрос LINQ для извлечения данных (код запроса LINQ преобразуется взапрос к базе данных).

Поэтому я предпочитаю LINQ;Если вы используете DAAB, я бы рекомендовал использовать инструмент code-gen.

HTH.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...