Ответ 1
Я всегда чувствовал, что большая часть того, что лежит в основе "вотума недоверия", было попыткой использовать EF, как если бы это был клон NHibernate. Это не так, и даже в EF 4, пытающемся использовать EF, как если бы это был перехват NHibernate, вероятно, закончится неудачей, хотя вы можете получить немного больше, прежде чем потерпеть неудачу. В качестве тривиального примера большинство людей используют LINQ в NHibernate на минимальной основе, если вообще, тогда как я не думаю, что вы можете быть продуктивным в EF вообще, если не используете LINQ довольно сильно.
С другой стороны, я был довольно успешным в использовании EF 1 на своих собственных условиях и сумел не допустить, чтобы заявления, которые люди делали в сообщениях в блоге, мешали ему работать для меня. Я с нетерпением жду использования многих новых функций в EF 4, но я был бы счастлив работать в хорошо структурированном проекте EF 1 в любое время. (В этом отношении я рад работать с NHibernate и не буду критиковать его за то, что он не действует как EF.)
Итак, я пытаюсь предложить несколько деликатно, что, прежде чем вы сможете решить, остаются ли все заявления, сделанные в Vote of No Confidence (в .NET 4)... ", вы должны сначала решить если эти претензии были действительны для вас и способ вы. Если ваше личное понимание O/R жестко связано с NHibernate, то EF 4, вероятно, все еще будет казаться второстепенным для вас. Если, с другой стороны, вы готовы изучить EF способ работы, то, вероятно, даже EF 1 будет казаться лучше, чем вы слышали.
Чтобы обратиться к утверждениям "без уверенности" напрямую и изучить их содержание и то, что было изменено в EF 4:
ИЗМЕНИТЬ ФОКУСИРОВАННЫЙ ДАННЫЙ АСПЕКТ УЧАСТНИКОВ ВЕДУЩИХ В РАЗРАБОТАННЫЕ АРХИТЕКТУРЫ ENTITY:
Это непонимание модели данных сущности Entity Framework. (Или, разумеется, если вы предпочитаете.) Но в любом случае это особенность, а не ошибка. Структура Entity Framework разработана для более общего случая служб данных, а не только для моделирования O/R в частности. Поведение поведения объектов, возвращаемых из службы данных, приводит к катастрофе в стиле CORBA. В отличие от ORM, где вы, в некоторой степени, застряли с любым типом, выходящим из черного ящика ORM, с моделью Entity Framework вы должны проектироваться по типам бизнеса. В этом случае типы сопоставленных объектов никогда не будут реализованы.
Это существенное различие между моделью Entity Framework и многими другими ORM. Лично я считаю, что разделение бизнес-поведения от O/R-сопоставления будет немного чище, чем объединение их вместе. Вам не обязательно соглашаться с этой идеей, но это явно дизайнерское решение, а не надзор.
НЕПРЕРЫВНЫЙ КОД, НЕОБХОДИМЫЙ СДЕЛАТЬ С ЛАКИЙ ЗАГРУЗКОЙ:
EF 4, к лучшему или худшему, имеет ленивую загрузку.
Я говорю "к лучшему или худшему", потому что ленивая загрузка позволяет очень легко генерировать избыточные запросы к базе данных. Он отлично работает, пока вы внимательно следите за тем, что происходит под капотом, но большинство людей этого не делают. Я нахожу проекцию, чтобы быть лучшей альтернативой ленивой загрузке, загрузке или явной загрузке большую часть времени.
Тем не менее, бывают случаи, когда ленивая загрузка удобна. Поэтому я рад видеть, что он добавлен в EF 4.
ОБЩИЕ, КАНОНИЧЕСКИЕ МОДЕЛИ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЛУЧШИЕ ПРАКТИКИ:
Трудно понять, что из этого сделать, поскольку некоторые вспомогательные тексты даже не согласованы на английском языке, например:
Подход, основанный на отказе от канонической модели, не был затруднен из-за отсутствия сложного инструментария по линиям Entity Framework.
Этот раздел, по-видимому, предполагает, что Entity Framework накладывает какое-то требование или, по крайней мере, сильное смещение на использование единой канонической модели данных для сложной системы. Я не уверен, что согласен, но это трудно сказать, учитывая отсутствие какого-либо конкретного примера в этом разделе. Поэтому я расскажу вам свои собственные предубеждения по этому вопросу, и вы можете согласиться или не согласиться со мной:
Часто бывает ошибкой использовать одну модель для большой системы, в зависимости от того, насколько велика система на самом деле. Однако в Entity Framework ничего не требуется, чтобы использовать одну модель. С другой стороны, инфраструктура Entity Framework, особенно в версии 1, не делает этого, чтобы упростить объединение нескольких моделей.
Теперь одно крупное приложение для сложной системы может быть столь же большой ошибкой, как и одна большая модель данных. Поэтому было бы неправильно, если бы Entity Framework упростила объединение многих крошечных моделей в одно слишком большое приложение; это просто заменило бы одну проблему другой.
С другой стороны, я считаю, что имеет смысл упростить создание большой системы из служб, разделенных таким образом, который подходит для проблемного домена. Я думаю, что для этого полезны службы передачи данных WCF, отдельная технология от Entity Framework, но одна из которых поддерживает платформу Entity Framework.
Я действительно думаю, что Entity Framework может в некоторой будущей версии упростить объединение двух или трех моделей в одно приложение, когда это необходимо. Вы можете сделать это сейчас, но есть какая-то ручная работа. Но, как я сказал выше, я не хочу "исправлять" проблему слишком большой модели данных, облегчая/поощряя создание слишком большого приложения.
ОТСУТСТВИЕ ЗАГРЯЗНЕНИЯ НЕЗАВИСИМОСТИ ПРИЧИНЫ БИЗНЕС-ЛОГИКИ БУДУТ УЧИТЬСЯ, ЧТОБЫ ПРОЧИТАТЬ, НАПИСАТЬ И ИЗМЕНИТЬ, ВЫЗЫВАЮЩИЕ РАСХОДЫ РАЗВИТИЯ И ТЕХНИЧЕСКОГО ОБСЛУЖИВАНИЯ ДЛЯ УВЕЛИЧЕНИЯ ПРИ ВОЗДЕЙСТВИЕМ СКОРОСТИ:
В этом разделе содержатся утверждения, которые я считаю ошибочными:
Entity Framework поощряет анти-шаблон Anemic Domain Model, препятствуя включению бизнес-логики в классы сущностей.
См. выше. Я думаю, что работа типов сущностей заключается в сопоставлении между реляционным пространством в пространстве объектов. В соответствии с принципом единой ответственности эти типы должны быть изменены только при изменении их единственной работы. Если бизнес-процессы меняются, то это ответственность, не связанная с отображением O/R. Возможно, ограничения других ОРМ налагают технический барьер на разделение этих обязанностей. Это нормально сгибать правила, когда технология диктует, если стоимость чистоты дизайна чрезмерна. Но я сильно одобряю подход типов объектов без поведения.
В текущем состоянии классы объектов EF не могут быть эффективно протестированы независимо от базы данных.
В том, что касается существа названия этого раздела, есть изменение для EF 4. Теперь возможно иметь полностью устойчивые типы сущностей, если это помогает вашему дизайну. Однако, начиная с самой ранней версии Entity Framework на словах, вы могли проектироваться в POCOs. Поэтому постоянство невежества всегда было доступно, когда это необходимо. Имея постоянство невежества в самих типах сущностей, можно отслеживать изменение с помощью объекта, не поддерживающего сохранение. Это может быть полезно в некоторых случаях. Но это существенно меньшая часть случаев, чем фиктивные утверждения об модульном тестировании, что уменьшает влияние точки, которую делает документ на много.
ЧРЕЗМЕРНЫЕ КОНФЛИКТЫ СМЕРТИ С ИСТОЧНИКОМ КОНТРОЛЯ В УСЛОВИЯХ КОМАНД:
Слияние XML на самом деле сложно? Если это так, возможно, следует изучить новый инструмент слияния. Я не считаю это проблематичным.
Однако здесь есть реальная проблема, хотя, опять же, она намного более узкая, чем претензии к документу. Вместо повторения, я просто укажу вам на мой пост по этому вопросу.
В EF 4 можно использовать кодовые модели, а не модели XML, чтобы разделить модель на множество разных файлов.