Я (очень) согласен с мыслями marvelTracker (и Ayende).
Вот некоторая дополнительная информация:
Ключевая стратегия
Существует общеизвестная стоимость использования GUID в качестве первичных ключей. Он был описан Джимми Нильссоном и был общедоступен на http://www.informit.com/articles/article.aspx?p=25862.. NHibernate поддерживает стратегию первичного ключа GUIDCOMB. Однако добиться этого в EntityFramework немного сложно и требует дополнительных шагов.
Перечисления
EntityFramework изначально не поддерживает перечисления. До июня CTP, который добавляет поддержку Enums http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-enums-june-ctp.aspx, единственный способ отобразить перечисления - использовать обходные пути. Пожалуйста, посмотрите: Как работать с Enums в Entity Framework?
Запросы:
NHibernate предлагает множество способов запроса данных:
- LINQ (с использованием re-linq-провайдера re-motion, https://www.re -motion.org / web / )
- Именованные запросы, инкапсулированные в объектах запросов
- ICriteria / QueryOver для запросов, критерии которых заранее не известны
- Использование проекций и агрегатов QueryOver (в некоторых случаях нам нужны только конкретные свойства объекта. В других случаях нам могут понадобиться результаты статистической функции, например, усреднение или счет):
- PagedQueries: чтобы избежать чрезмерной нагрузки на пользователя и повысить отзывчивость приложений, большие наборы результатов обычно разбиваются на меньшие страницы результатов.
- MultiQueries, которые объединяют несколько запросов ICriteria и QueryOver в одну и ту же базу данных
- Отдельные запросы, которые являются объектами запросов в частях приложения без доступа к сеансу NHibernate. Эти объекты затем выполняются в другом месте с помощью сеанса. Это хорошо, потому что мы можем избежать сложных репозиториев многими методами.
ISession's QueryOver:
// Query that depends on a session:
premises = session.QueryOver<Premise>().List();
Отдельный запрос:
// Full reusable query!
var query = QueryOver.Of<Premise>();
// Then later, in some other part of ther application:
premises = query.GetExecutableQueryOver(session).List(); // Could pass IStateleSession too.
Открытый исходный код
NHibernate имеет множество проектов, доступных на http://sourceforge.net/projects/nhcontrib/
Этот проект предоставляет ряд очень полезных расширений для NHibernate (среди прочих):
- Поставщики кэша (для кэша 2-го уровня)
- Внедрение зависимостей для сущностей без конструктора по умолчанию
- Полнотекстовый поиск (интеграция Lucene.NET)
- Пространственная поддержка (интеграция NetTopologySuite)
Поддержка
EntityFramework поставляется с поддержкой Microsoft.
NHibernate имеет активное сообщество:
Также взгляните на:
http://www.infoq.com/news/2010/01/Comparing-NHibernate-EF-4