Свободный NHibernate или NHibernate для Linq? - PullRequest
3 голосов
/ 02 августа 2010

Свободный NHibernate или NHibernate, какой из них мы должны предпочесть для поддержки linq?

Ответы [ 4 ]

22 голосов
/ 02 августа 2010

Свободный NHibernate из конфигурации, и Linq для запросов.Они делают разные вещи, и вы можете использовать оба одновременно.Свободный NHibernate не является заменой NHibernate или Linq, а просто вспомогательной библиотекой, которая помогает настраивать NHibernate в коде, а не с использованием файлов XML.

4 голосов
/ 02 августа 2010

Когда вы используете NHibernate, вы создаете сопоставления для ваших объектов и запросы (LINQ) для CRUD этих объектов.NHibernate использует файлы сопоставления XML.Fluent NHibernate просто генерирует эти файлы сопоставления для вас на основе соглашений или любых других возможных способов.Таким образом, не имеет значения, используете ли вы FNHib или нет.Вы по-прежнему можете запрашивать ваши объекты с помощью Linq, Hql, Criteria или QueryOver, и вы все еще собираетесь использовать NHibernate.

0 голосов
/ 30 июня 2014

Fluent для NHibernate очень хорошо работает в среде CodeFirst, где вы можете определить свои соглашения с базой данных с вашей командой DBA (если у вас есть).Это создает очень согласованную физическую модель из ваших POCO.

Что касается устаревших баз данных, то Fluent Overrides почти всегда необходимы для обработки случаев, когда база данных недостаточно согласована для использования Fluent Conventions.Fluent Automapping также можно легко расширить, создавая собственные атрибуты и считывая их из ваших соглашений об автоматическом сопоставлении.

Что касается запросов, вряд ли вы захотите использовать LINQ только для запросов.Реализация NHibernate LINQ и LINQ в целом не всегда делают лучшую работу, описывая ваши объединения и запросы так, как вы этого хотите.Например, на момент написания этой статьи LEFT OUTER JOINS не поддерживались в реализации NHibernate LINQ.LINQ может быть очень легко читаемым, и в большинстве случаев он работает нормально, но для лучшего контроля вы можете использовать запросы HQL или ICriteria вместе с вашими запросами LINQ.

Обычно я включаю show_sql вместе с NHibernate.SQL logger для log4net и посмотрите, что мои запросы создают, насколько SQL к БД.

В ситуациях, когда я хочу контролировать свои объединения или мою «горячую выборку», я иногда выбираю HQL или ICriteria , который дает мне больше контроля над тем, что NHibernate делает с моими запросами.

По сути, Fluent предоставляют большую гибкость для отображения ваших объектов и комбинации подходов (LINQ, HQL иICritieria) позволяет обрабатывать практически любые запросы / настройки ситуации.

0 голосов
/ 27 мая 2011

NHibernate - запись конфигурации в XML

Свободный NHibernate - запись конфигурации в C # или VB.NET с типом safe

Вам следует выбрать Fluent NHibernate, если вы хотите, чтобы он печатался безопасно и не хотел писать конфигурацию в XML. Таким образом, любые изменения вы можете легко переименовать и рефакторинг . Вы просто набираете точку, и intellisense очень поможет вам с документацией. Для написания первого конфига требуется время, но как только вы узнаете, это очень просто.

Linq в Fluent NHibernate - это то же самое, что и сам NHibernate. потому что, как и другие ответы, Fluent NHibernate просто для конфигурации и облегчает использование NHibernate, остальное пришло из NHibernate. например:

        var maleCustomers = (from t in Session.Query<Entities.Customer>()
                   where t.Gender == Gender.Male
                   select t).ToList();

Я использую Fluent NHibernate, но когда вы щелкнете правой кнопкой мыши по .Query<> «Перейти к определению», вы обнаружите, что он пришел из namespace NHibernate.Linq. Так что в любом случае вы используете тот же Linq.

Просто если вы сказали, что Linq для NHibernate против встроенного Linq для Sql отличается. Я не уверен, что разница. Я думал, что это то же самое, но когда я пытаюсь сделать запрос более сложным способом, он выдаст исключение или просто пустой запрос Sql.

Заключение : в любом случае вы выбираете для Linq то же самое, это NHibernate Linq .

...