Что такое фабрика прокси Замка в NHibernate?

Что такое фабрика прокси Замка в NHibernate? Какова его задача? Что прокси означает в этом случае?

8
задан Not loved Not their people 17 May 2012 в 22:19
поделиться

3 ответа

Castle можно использовать (среди прочего, у вас есть выбор, вы также можете использовать LinFu, Spring.NET, ...) для создания динамических прокси-серверов ваших сущностей.

По умолчанию NHibernate использует динамические прокси для представления ваших сущностей; таким образом он может вернуть вам объект, когда вы извлекаете какую-либо сущность из БД, без заполнения всех свойств. Используя динамический прокси, он будет заполнять сущность только после того, как вы действительно обратитесь к свойству.
(Так что это своего рода ленивая загрузка; впрочем, не путать с ленивой загрузкой коллекций / ассоциаций).

Такое поведение является причиной того, что NHibernate хочет, чтобы вы создавали каждое свойство как виртуальное по умолчанию: NHibernate создаст новый класс, используя этот прокси-провайдер Castle (или LinFu, ...), который наследуется от вашего объекта, и он переопределит все свойства, чтобы он мог «ввести» код, необходимый для извлечения необходимых данных из БД.

Вы можете отключить это поведение, указав lazy = false в отображении объекта. (Хотя я думаю, что даже если вы отключите эту функцию, NHibernate все равно потребует, чтобы вы использовали одну из фабрик прокси).

11
ответ дан 5 December 2019 в 10:01
поделиться
3
ответ дан 5 December 2019 в 10:01
поделиться

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

3
ответ дан 5 December 2019 в 10:01
поделиться