Подтвердить что ты не робот

NHibernate или Fluent NHibernate?

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

Каковы недостатки в использовании? (возможно, зависимость от версии)? Плюсы, минусы, опыт и т.д.

4b9b3361

Ответ 1

Свободный NHIbernate находится на вершине NHibernate, поэтому на самом деле это не выбор между ними. Если вы собираетесь использовать NHibernate, ВЫБЕРИТЕ использовать Fluent NH поверх него, чтобы сэкономить огромное количество усилий.

Свободный NHibernate - это потрясающе, я бы не использовал NHibernate без него. Вы можете свободно отображать все свои сущности (давая вам проверку времени компиляции и поддержку автоматического тестирования) вместо того, чтобы хранить громоздкие XML файлы и помнить их синтаксис /DTD.

Он также может автоматически отображать ваши объекты на основе стандартных и/или собственных пользовательских соглашений.

Просто используйте его!

Ответ 2

Я определенно скажу, что вы идете с бегло-nhibernate. Просто имейте в виду, что это может быть не так гладко, как хотелось бы.

  • Относительно зависимости от версии

    • У меня была проблема с "обратной" зависимостью, когда обновление до новой версии FNH потребовало от меня перехода на новую версию NH (от 2.0 до 2.1, я думаю). Для меня это не было серьезной проблемой.
    • Я недавно (сегодня утром) сбросил NH 2.1.1 в RTM FNH 1.0 (это распространяется с 2.1.0) без каких-либо драм (пока).
  • Изменить: с момента написания этого сообщения FNH созрел в значительной степени до такой степени, что я не думаю, что это настоящая проблема больше Поддержка сопоставления - некоторые сопоставления пока невозможны с плавным nhibernate. Однако это НЕ является причиной того, чтобы избежать FNH, поскольку гибридные сопоставления fluent-xml позволяют вам отказаться от традиционного xml в случае свободного доступа к его отображению (хотя это относится только к грамотности каждого класса). Примеры отображений:

  • Фактор сложности соединения. По звукам вы будете одновременно изучать как FNH, так и NH. Для большинства довольно простых приложений это прекрасно - Infact FNH часто настолько хорош, что вам нужно знать довольно мало о сопоставлениях hbm.xml. Но если вы хотите сделать что-то достаточно сложное, он редко будет работать в первый раз, и вам остается задаться вопросом, является ли это проблемой PEBKAC, свободной или NH. Чаще, чем я надеялся, я закончил писать традиционные сопоставления xml (конечно, вы это делаете в любом случае, но было бы предпочтительнее не тратить больше усилий, чем необходимо возиться с беглостью в первую очередь).

Ответ 3

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

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

Ответ 4

Лично я не очень хорошо разбираюсь в свободном nhibernate, так как мне удобно с картографическими файлами. использование visual studio для создания файлов сопоставления - это легкий ветерок, и вы можете установить схему для XML файла, который дает вам intellisense в файле сопоставления. Я согласен с тем, что проверка синтаксиса во время компиляции является преимуществом для использования fluent-nhibernate, но я изо всех сил стараюсь научиться беглому API, когда я уже знаком с XML-сопоставлением. Возможно, мне нужно просто перебраться через мой lethergy и узнать это уже...: -)

Ответ 5

Свободный N-Hibernate - действительно хорошая обертка над NHibernate. Чтобы управлять отображением в Fluent намного лучше, чем xml-сопоставление. Развитие становится быстрым, когда вы переходите к Fluent...

Лучше всего, если вы используете Entity Developer для создания сущности и схемы базы данных.