Entity Framework и nHibernate для повышения производительности, общие характеристики кривой обучения - PullRequest
8 голосов
/ 20 мая 2010

Я знаю, что об этом спрашивали несколько раз, и я прочитал все сообщения, но все они очень старые. И, учитывая улучшения в версиях и выпусках, я надеюсь, что могут появиться новые взгляды.

Мы создаем новое приложение на ASP.NET MVC, и нам необходимо завершить работу с инструментом ORM. Мы никогда раньше не использовали ORM и в значительной степени сводились к двум - nHibernate & Entity Framework.

Мне действительно нужен совет от кого-то, кто использовал оба этих инструмента и может порекомендовать на основе опыта. Есть три момента, на которых я концентрируюсь, чтобы завершить -

  1. Performance
  2. Кривая обучения
  3. Общая вместимость

Ваш совет будет высоко оценен.

С наилучшими пожеланиями,

Ответы [ 4 ]

10 голосов
/ 20 мая 2010

Я бы использовал Nhibernate. Я бы выбрал Sharp Architecture в качестве отличного фреймворка, который объединяет NHibernate, ASP.NET MVC и кучу других инструментов с открытым исходным кодом в единое целое, которое даст вам прочную архитектурную основу.

Nhibernate более зрелый, чем EF4. Это хорошо поддерживается сообществом. Пока вы готовы время от времени пачкать руки, вам это понравится. Поддержка LINQ сейчас немного слабовата, но она быстро улучшается. Кривая обучения неплоха, но такие вещи, как управление сессиями, поначалу могут немного сбивать с толку. Одна из причин, по которой мне нравится Sharp Architecture, состоит в том, что у них есть все необходимое для NHibernate, а также множество советов о том, как правильно его использовать в проекте ASP.NET MVC.

EF4 имеет знак одобрения MS. Это довольно хорошо сейчас, но все еще позади NHibernate. Это очень хороший выбор, и вы найдете множество документов от MS, службы поддержки MS и, в конечном итоге, больше разработчиков, знакомых со всеми плюсами и минусами. Я должен также упомянуть, что ребята из Sharp Architecture добавляют поддержку EF4 в свою общую структуру. Они по-прежнему будут поддерживать NHibernate, но вы сможете использовать EF4, если хотите.

2 голосов
/ 25 июля 2012

Я пытаюсь разобраться в этом ... После встраивания приложений в оба, NHibernate определенно стал более мощным, но и довольно неуклюжим, когда EF очень чистый. И после работы с Rails / ActiveRecord, оба они очень богаты по сравнению, так что любой из них обязательно сработает!

Я заметил, что NHibernate отслеживает то, что он только что выполнил, и если он просто выполнил оператор, он не будет подвергать его повторной проверке, поэтому правильно разработанное приложение будет выполнять минимальные операторы базы данных. Я знаю, что EF тоже не очень медленный, но я не уверен, что он кэширует утверждения и результаты таким же образом. Для большого приложения это может сэкономить некоторые ресурсы базы данных!

Короче говоря, NHibernate для функциональности и конфигурируемости, а EF 4.0 для чистоты и быстрого обучения. Кроме того, следует ожидать, что EF в следующей версии или две должны догнать или превзойти NHibernate по функциональности, поэтому может иметь смысл ознакомиться с обоими.

2 голосов
/ 20 мая 2010

Я думаю, что для изучения 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. Если это важно для вас.

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