Что такое nhibernate, что отсутствует в инфраструктуре сущности 4?

Мы пытаемся решить, стоит ли использовать сущность framework 4 в проекте. С этой целью я думаю, что хорошим местом для начала было бы сравнить его с nhibernate, который зрелый и проверенный годами использования, чтобы иметь все функции, необходимые людям для приложений enterpriseisey, и выяснить, какие функции nHibernate имеет, что отсутствует EF4 на.

Итак, мои ограниченные знания:

  • Кэширование: nhib имеет кэш L2, тогда как EF4 имеет плохое кэширование (?)
  • nHibernate имеет провайдеры для большинства БД, тогда как EF нуждается в аддонах для не-sql db
  • nHib быстрее/оптимизирован
  • nHib имеет точки расширения (например, настраиваемые типы полей)
  • ... что еще?

Найдено статей:

http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases.aspx

http://dotnetslackers.com/articles/ado_net/A-Feature-driven-Comparison-of-Entity-Framework-and-NHibernate-Multiple-Databases-Part2.aspx

Ответ 1

Я попробовал структуру сущности, когда она впервые появилась, и я обнаружил, что конфигурация слишком сложна при выполнении чего-либо, что не является стандартным (с любым реальным приложением, все не так идеально, как примеры). С nhibernate сложность довольно легко решалась в очень читаемых файлах сопоставления. Файлы сопоставления структуры Entity не были почти такими же читаемыми.

Ответ 2

NHibernate поддерживает другие базы данных, кроме SQL Server, например. если вы используете Oracle. Сама платформа Entity Framework предназначена для поддержки нескольких поставщиков, но единственный встроенный поставщик, который вы получаете, предназначен для SQL Server. Oracle еще не выпустила ни одного провайдера, и есть коммерческие или неоднородные бесплатные провайдеры для других баз данных. Поэтому, если поддержка нескольких БД находится в области видимости, тогда NHibernate опережает EF 4 в настоящее время.

Ответ 3

Хотя у меня нет большого опыта работы с EF, одна из самых больших точек продажи NHibernate - это точки расширяемости. Типы пользователей и Слушатели событий - отличные примеры того, как настраиваемые все аспекты опыта NHibernate.

Ответ 4

Я использую фреймворк Entity в настольном приложении, и, хотя я его вполне доволен, есть недостаток в использовании объектов DateTime - вы не можете получить доступ к свойствам, самое главное, DateTime.Date свойство.

Кроме того, вы не можете использовать посторонние объекты Entity Framework (то есть: объекты не в контексте Entity Framework, такие как maping Journal to JournalDto) в ваших запросах LINQ, т.е. при сопоставлении - сначала вы должны выполнить запрос с ToList() и затем выполнить свое сопоставление.

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