Что такое фабрика прокси Замка в NHibernate? Какова его задача? Что прокси означает в этом случае?
Castle можно использовать (среди прочего, у вас есть выбор, вы также можете использовать LinFu, Spring.NET, ...) для создания динамических прокси-серверов ваших сущностей.
По умолчанию NHibernate использует динамические прокси для представления ваших сущностей; таким образом он может вернуть вам объект, когда вы извлекаете какую-либо сущность из БД, без заполнения всех свойств. Используя динамический прокси, он будет заполнять сущность только после того, как вы действительно обратитесь к свойству.
(Так что это своего рода ленивая загрузка; впрочем, не путать с ленивой загрузкой коллекций / ассоциаций).
Такое поведение является причиной того, что NHibernate хочет, чтобы вы создавали каждое свойство как виртуальное по умолчанию: NHibernate создаст новый класс, используя этот прокси-провайдер Castle (или LinFu, ...), который наследуется от вашего объекта, и он переопределит все свойства, чтобы он мог «ввести» код, необходимый для извлечения необходимых данных из БД.
Вы можете отключить это поведение, указав lazy = false в отображении объекта. (Хотя я думаю, что даже если вы отключите эту функцию, NHibernate все равно потребует, чтобы вы использовали одну из фабрик прокси).
Когда вы выбираете сущность из ISession, вы получаете не настоящий экземпляр сущности - вы получаете прокси-объект. Этот прокси-объект наследует вашу сущность и используется NHibernate для отслеживания изменений, внесенных в поля.