Подтвердить что ты не робот

Решение между NHibernate и Entity Framework?

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

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

4b9b3361

Ответ 1

У меня был очень ограниченный опыт работы с 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 все еще отстает в этих областях, но набирает силу.

Ответ 2

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

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

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