Свойства nhibernate и виртуального класса? - PullRequest
14 голосов
/ 11 мая 2009

Просто читая о nHibernate, почему свойства класса должны быть виртуальными?

В чем причина этого?

Ответы [ 2 ]

18 голосов
/ 11 мая 2009

Я бы посоветовал вам прочитать Должно ли все быть виртуальным с NHibernate?

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

Чем длиннее ответ, тем интереснее хоть. Важная особенность, что любой реальный ORM должен иметь прозрачный ленивый Загрузка. Если вы получаете объект через ORM вы не хотите, чтобы автоматически вытягивать весь объект график (не по умолчанию в любом случае), но вы не хочу засорять ваш код проверяет, есть ли определенные ассоциации были загружены еще, а затем загрузка их при необходимости. Это ОРМ обязанность. В идеале вы хотите иметь возможность доступа к свойствам и иметь ORM загружает необходимые данные при первый доступ к этим свойствам, если данные еще не получены.

6 голосов
/ 11 мая 2009

Как сказал Эндрю, свойства являются виртуальными для запуска отложенной загрузки. Вот объяснение, почему это так: во время выполнения NHibernate заменит прокси-объекты для ваших объектов недвижимости. Когда к ним обращаются, прокси-объекты знают, как получить реальные объекты для вас. Пометка свойств как виртуальных позволяет выполнить эту замену.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...