nHibernate против LLBLGen Pro

Я пытаюсь работать с ORM tool, чтобы перейти и сузить его до двух кандидатов.

nHibernate или LLBLGen Pro

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

Я уже знаю, что человек свободен и один Нет, я также знаю, что nHibernate может занять некоторое обучение....

большое спасибо, Ричард

8 ответов


Я использовал оба. Сначала я был продан на nHibernate и отказался попробовать что-либо еще, хотя я знал о других вариантах.

с LLBLGen Pro я был скептичен, но вскоре увидел преимущества. Я не полностью отказался от nHibernate. Я буду продолжать держать int в моей "коробке инструментов". Я нашел LLBLGen полезным в некоторых случаях, особенно при взаимодействии с базой данных, которая уже существует, и у вас нет выбора ее перепроектировать. Это займет меньше часа (в зависимости от размера базы данных, конечно), чтобы генерировать объекты сущности LLBLGen из базы данных, а не кодировать все это вручную с помощью nHibernate и выполнять сопоставления. nHibernate отсутствует хороший графический интерфейс для создания сопоставлений. Этот факт становится еще более важным, когда база данных массивна с тысячами таблиц, которые вам нужно потенциально получить доступ в вашем приложении.

хотя LLBLGen является более генератором уровня доступа к данным (и я не обычно поклонник генераторов DAL), он имеет много функций, которые имел бы инструмент "true ORM". На мой взгляд это лучшее из обоих миров. Как только вы начинаете работать с ним, вы начинаете понимать, что он очень гибкий и расширяемый. Одна часть мне очень нравится, что я могу создавать частичные классы для сгенерированных объектов сущности, где я могу кодировать в своей бизнес-логике, а также проверку.

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

для тех, кто только начинает использовать инструменты типа ORM, я действительно рекомендую начать с LLBLGen, потому что nHibernate может быть подавляющим. И в конце концов вы достигнете того же результата (более или менее).

правка #1: LLBLGen теперь также имеет поддержку 100% для В LINQ. (Поэтому, если вам нравится LINQ to SQL по этой причине), llblgen может поддерживать многие базы данных, где LINQ to SQL предназначен только для базы данных Microsoft SQL.

Edit #2: согласно гравитону вы можете использовать CodeSmith для создания кода для nHibernate. Это действительно круто, но для новичка в ORM я бы все равно рекомендовал LLBLGen. Для меня это добавление дополнительных зависимостей, где LLBLGen имеет все это в одном пакете. Также как я сказал прежде чем кривая обучения будет настолько менее крутой, и вы получите те же преимущества, которые также помогут вам облегчить nHibernate, если вы когда-нибудь решите пойти туда.


основное различие заключается в том, что LLBLGen является генератором кода, а NHibernate - "истинной" библиотекой ORM.

преимущества LLBLGen:

  • простота в использовании дизайнера моделей. Можно импортировать существующую схему базы данных
  • полностью типизированная объектная модель и язык запросов

LLBLGen недостатки:

  • вам нужно приложение дизайнера, чтобы изменить вашу модель
  • Не бесплатно
  • может раздуть ваш код, потому что генерируется много кода

преимущества NHibernate:

  • не требуется дизайнерское приложение. Только код
  • широко используется (на основе самого популярного Java ORM, Hibernate)
  • очень мощный для отображения любой модели данных вы можете себе представить
  • открыть источник

NHibernate на недостатки:

  • трудно учись!--8-->
  • Не так сильно, как хотелось бы (особенно запросы)

конечно, это только моя личная точка зрения...


Я набрал довольно длинный ответ, прежде чем понял, что это был несколько старый вопрос. Ну что ж. Это все еще очень актуально.

вы сузили свой список до двух лучших кандидатов на ORM в мире .NET. У меня ограниченный опыт работы с ними, но я много читал о плюсах и минусах обоих. Они действительно служат несколько различным потребностям по-разному.

в предстоящем LLBLGen Pro 3.0 Франс Боума говорил о добавлении функций в создание отображений NHibernate. Таким образом, это даже не обязательно решение "или-или".

Если вы хотите сделать дизайн" class first "(в отличие от дизайна" database first"), NHibernate-это в значительной степени ваш лучший и единственный вариант прямо сейчас (ни LLBLGen Pro, ни Entity Framework не поддерживают этот режим, хотя похоже, что Entity Framework улучшает его поддержку в следующей версии).

NHibernate и LLBLGen Pro оба упорно работают, чтобы хорошо работать с устаревшими базами данных, которые вы не может измениться и приходится жить с этим. В этом их общая сила. Они оба также работают с Linq. Они оба также поддерживают некоторое количество графического моделирования, хотя LLBLGen Pro намного превосходит в этом отношении (ActiveWriter для NHibernate похоже на конструктор LinqToSql в Visual Studio, но на самом деле он не так богат функциями).

LLBLGen Pro имеет гораздо более сильные способности генерации кода, но слишком много генерации кода может привести к скомпрометированной тестируемости и ремонтопригодность (одна небольшая настройка может привести к необходимости повторного тестирования большого количества кода).

в то время как NHibernate хочет помочь вам работать с довольно сложными сценариями объектно-реляционного сопоставления, такими как наследование классов, LLBLGen Pro действительно просто предоставляет вашу базу данных как слой данных и бизнес-объекты очень быстро.

Если вы можете приобрести LLBLGen Pro и иметь некоторое время, я бы попробовал оба и посмотреть, какой из них лучше соответствует вашим потребностям. Изучение обоих ORMs хорошо для ваше резюме в любом случае.

Так, в конце концов, я бы сказал, что это ситуативно. Стоимость NHibernate и отсутствие серьезных недостатков делают довольно убедительный случай в большинстве ситуаций.


новая версия LLBLGen Pro (3.0) позволяет генерировать код для NHibernate, поэтому не нужно выбирать:). Он также позволяет разделить объекты на различные домены.

Я по-прежнему предпочитаю среду выполнения LLBLGen pro, хотя интерпретатор LINQ более полный, и у него лучше отслеживание изменений полей.

к сожалению, в новой среде LLBLGen Pro 3.0 не так много новых функций, поскольку создатель сначала хотел сосредоточиться на инструментах, чем совершенствование существующей системы.


Я использовал nHibernate, LLBLGen Pro, пользовательский уровень данных из моей консалтинговой компании, библиотеки Enterprise и LINQ. LLBLGen-мой любимый, и он позволяет писать один бизнес-уровень, который может разговаривать с различными типами баз данных, используя один и тот же код, обеспечивающий независимость базы данных! Еще одна невероятная особенность-это возможность нескольких подключений к различным базам данных. Это очень полезно, когда в большой компании и одна система написана в Sql Server, а другая должна интерфейс-это в Oracle.

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

Это не только ускорить сторону поколения DAL моего приложения, это также легко создавать запросы в бизнес-слое и отправлять их на уровень презентации. Это позволило легко создать приложение корпоративного класса.

Если вы действительно хотите использовать nHibernate, начните с LLBLGen Pro и создайте код nHibernate. Если позже ваш отдел решит переключиться с nHibernate на LINQ, вы будете охвачены. Хотите переключиться с Sql Server на Oracle? Это возможно и относительно легко с LLBLGen тогда как с вручную закодированным кодом nHibernate, вы должны перепишите все, что практически невозможно оправдать стоимостью.

Франс также был доступен и ответил на некоторые из моих вопросов.


Не забывайте об одном из самых больших плюсов Hibernate: HQL. С HQL ваши навыки SQL не тратятся впустую. И Hibernate обеспечивает очень хорошую, бесшовную поддержку для собственного запроса. Если у вас есть какая-то странная, нестандартная база данных, почти наверняка вам понадобится ваш навык SQL в какой-то момент, и удачи с LLBL!


для меня это сводится к базе данных centric (LLBLGen Pro) против модели домена centric (NHibernate).

Так как я парень DDD / OO, выбор всегда был очень легким для меня, но я понимаю, почему LLBLGen Pro популярен.


мы используем LLBLGen на работе, и это ругается-а именно потому, что у нас есть несколько похожих схем, но вам нужно иметь другую библиотеку DLL/Class для каждой схемы, что означает, что становится раздражающим писать код, который может быть нацелен на любую схему.

конечно, это необычная среда, поэтому она может не относиться к вам.