Атрибуты сопоставления NHibernate против свободного NHibernate - PullRequest
8 голосов
/ 05 мая 2010

Обладают ли атрибуты сопоставления той же универсальностью, что и nhib hbm? Можете ли вы использовать их вместе с FNH для обработки вещей, которые FNH пока не делает так же, как и для hbm?

Приветствия
Berryl

Под отображением атрибутов я не имею в виду файлы hbm; очевидно, есть атрибуты, которые поставляются с NHib (или, может быть, в эти дни NHib contrib), которые вы используете для украшения вашего класса и свойств класса. Я предполагаю, что эти предшествующие даты FNH, но не уверен.

Ответы [ 6 ]

5 голосов
/ 05 мая 2010

Атрибуты NHibernate предшествуют FNH.Кроме сравнительно небольшой группы упорных противников, я не знаю никого, кто бы их использовал.Они поддерживаются, но не совсем дружелюбно.Если вам нравятся атрибуты, атрибуты Castle ActiveRecord гораздо лучше, чем базовые атрибуты NHibernate.

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

5 голосов
/ 05 мая 2010

Я лично предпочитаю создавать файлы hbm.xml самостоятельно. Я использовал Fluent, но мне нравится самому управлять мелкими мелочами для таких вещей. Однако я не сталкивался с какими-либо сопоставлениями, с которыми мне не удалось поработать с Fluent ...

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

Я думаю, что есть одинаковая кривая обучения для обоих, поэтому, если вы собираетесь потрудиться изучать Fluent, который сам создает файлы hbm.xml, почему бы просто не научиться создавать чертовы файлы hbm.xml самостоятельно и пропустите среднего человека!

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

  • Макс Шиллинг
1 голос
/ 13 января 2012

Я пытаюсь понять, где находится NHibernate 3 по отношению к Hibernate 3 относительно атрибутов и аннотаций. Я был в нескольких проектах Java, где мы использовали аннотации Hibernate 3 для отображения. Это довольно элегантно, как

  1. права четко документированы там, где живет код
  2. легче отлаживать при переходе через отладчик ...
  3. вам не нужно открывать отдельный файл вне контекста
  4. меньше артефактов для управления
  5. проверка времени компиляции
  6. intellisense = меньше опечаток
  7. нет необходимости устанавливать / изучать отдельный сторонний компонент (например, FNH)
  8. команда Hibernate инвестировала в создание простых в использовании аннотаций

Не уверен, что я покупаю аргументы "что делать, если вам нужно изменить источники данных" или "разделение интересов". На практике эти аргументы смотрят на «20%» (или меньше), которые либо не произойдут, либо окажут незначительное влияние, если они это сделают - ИМХО выгоды гораздо больше.

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

1 голос
/ 05 мая 2010

Я согласен с большинством комментариев здесь, Hibernate дает вам свободу выбора того, как реализовать карты для объектов.

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

Что произойдет, если вы захотите изменить свой источник данных на OODB или просто файл. Классы будут иметь избыточный код отображения (атрибуты). в этом случае можно сказать, что его очиститель хранит отображение на уровне данных / инфраструктуры с реализацией хранилища (предполагается использование шаблона хранилища)

Я тоже согласен, каждому свое:)

1 голос
/ 05 мая 2010

Мы используем их в моем бизнесе, и я вроде как.

Я думаю, что это действительно аккуратно писать отображение прямо в определении класса (я знаю - каждому свое).

1 голос
/ 05 мая 2010

Я никогда не сталкивался с ситуацией, которую Fluent NHibernate не может обработать, но, возможно, вы используете скрытый атрибут. Что-нибудь конкретное, что вам нужно знать, доступно?

...