Как сравнить Entity Framework 2 и NHibernate? - PullRequest
3 голосов
/ 07 августа 2009

Мне бы хотелось знать такие вещи, как:

  • Преимущества / недостатки между двумя?
  • Сходства / различия между двумя структурами?
  • Чем они похожи / отличаются архитектурно?
  • Сколько стандартного кода необходимо использовать для каждого?
  • Может ли Entity Framework эффективно использоваться вне Visual Studio по сравнению с NHibernate? Является ли Entity Framework более эффективным, чем NHibernate, при использовании с Visual Studio?

Примечание. Этот вопрос относится к Entity Framework 2 (в настоящее время все еще в разработке).

1 Ответ

8 голосов
/ 07 августа 2009

Отказ от ответственности: Этот пост основан на моих текущих знаниях о том, на что будет похожа следующая версия Entity Framework. Это может быть неточно или может измениться, пока не будет передана следующая версия.

Общий подход:

Основным подходом Entity Framework (EF) является использование инструмента графического конструктора для создания модели данных Entity и для генерации классов предметной области, а также отображения из этой модели. Поддерживаются и другие подходы, но этот способ работы, вероятно, всегда будет основным.

NHibernate (NH) - это текстовый инструмент, который требует от пользователя писать все классы домена и сопоставления вручную, если вы не обращаетесь к сторонним программам для генерации кода, таким как MyGeneration of CodeSmith или дополнительным соглашением по поддержка конфигурации, например, Fluent NHibernate.

Генерация кода:

Генерация кода является основной частью стандартного использования EF, либо с помощью инструмента графического конструктора, либо с помощью инструментов командной строки. Наличие инструментов с графическим интерфейсом и командной строки является плюсом, поскольку позволяет легко приступить к работе с EF, а также обеспечивает более расширенное использование, которое можно автоматизировать, например, в процессе сборки.

Генерация кода не поддерживается NHibernate, за исключением создания схемы, если вы хотите считать это как генерацию кода. Вы можете получить генерацию кода, если обратитесь к стороннему программному обеспечению.

Генерация схемы базы данных:

EF добавит поддержку для первой разработки модели, позволяя пользователю генерировать схему из модели данных Entity. NHibernate уже давно поддерживает генерацию схем. Разница здесь в том, как вы создаете свою «модель», как упоминалось ранее.

LINQ:

EF улучшит свою дурацкую реализацию LINQ с v1, и NH теперь достиг версии 1.0 LINQ to NH, поэтому между ними не должно быть серьезных различий.

ПОКО:

EF добавит лучшую поддержку подхода, основанного на домене, и использования классов домена, отделенных от уровня доступа к данным. Однако, поскольку POCO не является основным вариантом использования EF, я не могу понять, как их поддержка POCO может когда-либо достичь уровня NHibernate. Поддержка POCO в EF еще молода, и мне кажется, что это бонус, если вы поддерживаете POCO / DDD и по какой-то причине вы работаете над EF.

Вся инфраструктура NHibernate построена для разработки POCO специалистами DDD, и они достигли версии 2.1, а также используют всю работу, вложенную в Hibernate на стороне Java. NHibernate, вероятно, останется выбором №1 для толпы DDD / POCO / ALT.NET в течение некоторого времени.

Ленивая загрузка:

Следующая версия EF будет включать поддержку автоматической отложенной загрузки. Автоматическая отложенная загрузка долгое время была важной частью NHibernate.

Кривая обучения:

Обе структуры сложны и мощны, и, следовательно, требуют много времени для освоения. Но EF довольно удобен для новичков, так как он интегрирован в Visual Studio с его графическим дизайнерским инструментом, и поскольку он может генерировать много вещей для вас без необходимости знать что-либо об инфраструктуре. Однако, если вы хотите углубиться в EF и по-настоящему изучить фреймворк, вы должны быть готовы потратить немало времени на его использование.

NHibernate имеет печально известную кривую обучения, но некоторые недавние улучшения немного уменьшили ее. Теперь, когда LINQ to NH версии 1.0, синтаксис запросов станет проще для разработчиков, впервые знакомых с NH, а проект Fluent NHibernate улучшает процесс сопоставления и даже работает над автоматическим сопоставлением, которое становится все лучше и лучше. время.

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