Выбор между NHibernate и Entity Framework? - PullRequest
45 голосов
/ 20 июля 2010

Каковы основные преимущества и недостатки NHibernate и Entity Framework 4.0?

(отмечая мой вопрос, я заметил больше тегов NHibernate, чем EF. Является ли NHibernate более популярным?)

Ответы [ 2 ]

21 голосов
/ 20 июля 2010

У меня был очень ограниченный опыт работы с EF (несколько постов в блогах и учебные пособия), но большой опыт работы с NHibernate.

Microsoft неизменно отстает от движения OpenSource, и это определенно относится к NHibernate. Когда EF 1.0 был впервые выпущен, в нем отсутствовала поддержка ключевых функций, таких как поддержка POCO и постоянное невежество, требовалось, чтобы ваши классы сущностей расширяли базовый класс сущностей из EF, поэтому ваши классы сущностей не были полностью отделены от EF. Это повлияло на ремонтопригодность и тестируемость устройства, а также на возможность переключения поставщиков ORM в случае необходимости.

С другой стороны, NHibernate позволил вам полностью отделить ваши сущности от самого NHibernate. EF 4.0 несколько догнал в этом отношении, его подход Code First Development ( недавно объявленный Скоттом Гатри ) - шаг в правильном направлении.

Сам NHibernate обладает некоторыми очень мощными возможностями отображения, такими как отображение наследования, отображение классов компонентов (например, объект Address на объекте Customer), отображение сопоставления однонаправленных объектов. Это позволяет вам в полной мере использовать возможности объектно-ориентированного программирования (инкапсуляция, полиморфизм, наследование и т. Д.) Внутри вашей предметной модели, думать о ваших классах сущностей как о инкапсулирующем поведении, а не только о контейнерах данных. Если вы стремитесь построить модель своего домена в соответствии с принципами Domain Driven Design , тогда NHibernate очень подходит для этого. Я не могу говорить непосредственно об EF 4.0 по этим вопросам, только из того, что я слышу от других пользователей NHibernate, пытающихся использовать EF 4.0, но EF 4.0 все еще отстает в этих областях, но он набирает силу.

11 голосов
/ 20 июля 2010

Я бы сказал, что Entity Framework от Microsoft является как преимуществом, так и недостатком.Вы получаете фреймворк прямо из того же источника, что и сам .NET.Плохая новость заключается в том, что Microsoft часто устаревает в своей собственной кодовой базе без учета обратной совместимости.

NHibernate не принадлежит Microsoft, и нет никакого другого стандарта, кроме того, что, как говорят разработчики Hibernate и NHibernate, относятся к их коду.Хорошей новостью является то, что они, как правило, обращали внимание на обратную совместимость.Существует большая база пользователей, потому что Hibernate существует уже некоторое время.

Одна из особенностей, которые мне больше всего нравятся в Spring, заключается в том, что они не принимают такие решения от вас.Spring имеет собственные функции JDBC, но поддерживает Hibernate, TopLink, JDO, iBatis и JPA.Вы также можете свободно вводить свои собственные классы, если решите пойти другим путем (например, NoSQL).Почему ваш выбор должен быть продиктован рамочным выбором?Это очень няня: «Мы - Microsoft; мы знаем, что лучше для вас, чем вы».

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