Просто прочитав о nHibernate, почему свойства класса должны быть виртуальными?
Какова причина этого?
Просто прочитав о nHibernate, почему свойства класса должны быть виртуальными?
Какова причина этого?
Я бы посоветовал вам читать Должен ли быть виртуальным с NHibernate?
Быстрый ответ на этот вопрос: потому что нам нужно, чтобы участники были виртуальными для того, чтобы сделать нашу ленивую загрузку магия/вуду.
Более длинный ответ более интересен хоть. Важная особенность, которая реальный ORM должен быть прозрачным Lazy Загрузка. Если вы извлекаете объект через ORM, вы не хотите, чтобы он автоматически втягивать весь объект (по умолчанию все равно), но вы Не захотейте засорить свой код проверяет, не связаны ли определенные ассоциации еще загружены, а затем загрузка при необходимости. Это ORM обязанность. В идеале вы хотите иметь доступ к свойствам и ORM загружает необходимые данные на первый доступ к этим свойствам, если данные еще не получены.
Как сказал Эндрю, свойства виртуальны, чтобы запускать ленивую загрузку. Вот объяснение, почему это так: во время выполнения NHibernate заменит прокси-объекты для объектов вашей недвижимости. Как только они будут доступны, объекты-прокси знают, как получить реальные объекты для вас. Маркировка свойств как виртуальных позволяет эту замену.
Если вы не используете упомянутые методы, которые не являются виртуальными, вы можете просто добавить SetProperty
следующего фрагмента:
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration().SetProperty(NHibernate.Cfg.Environment.UseProxyValidator, Boolean.FalseString)
Это просто отключает проверку, вызывающую ошибку, убедитесь, что вы не используете не виртуальные методы, так как NHibernate не сможет их прокси-сервер (как это было указано в исходной ошибке).