Я думаю, что для изучения NHibernate требуется больше времени.
EF предоставляет графический дизайнер , к сожалению, у NHibernate нет универсального дизайнера. Кстати это не проблема. Если вы разрабатываете в доменном режиме (DDD), сначала вы будете проектировать свои сущности, и вас не волнует структура базы данных (как вы привыкли), NHibernate позаботится об этом за вас.
EF 4 стал ближе к NHibernate . Я бы не стал работать с EF 3.5, ему не хватает многих функций.
Если вы думаете, что NHibernate на первый взгляд слишком сложен, вы можете начать с фреймворков, построенных поверх NHibernate . ActiveRecords и Sharp Architect являются хорошими примерами.
AFAIR EF 3.5 поддерживает только SQL Server 2000 . Он не может обрабатывать новые типы данных из SQL Server 2005. У меня нет информации о EF 4, но я полагаю, что он поддерживает эти улучшения.
Если вы используете NHibernate в реальных текстовых приложениях, вам необходимо построить инфраструктуру . Например. Я реализовал шаблоны Unit of Work и Repository , чтобы иметь возможность писать тесты и создавать слои в моем приложении. Вы должны ожидать того же, используя EF. Отсоединение и присоединение сущностей в EF 3.5 было непростым делом, мне пришлось написать сложные методы расширения, чтобы пометить поля как грязные и так далее. Я надеюсь, что они решили это в EF 4. Нет такой проблемы с NHibernate.
Вам не нужно писать HQL-запросы в NHibernate, вы можете использовать LINQ провайдера . Я думаю, что это очень важно. :)
В целом NHibernate является зрелым продуктом с хорошей общественной и коммерческой поддержкой . EF молод, но сильно поддерживается Microsoft. Да, и EF - это вещь только для Microsoft, в то время как вы можете перенести свои знания NHibernate на Java. Если это важно для вас.