2011-02-08 3 views
0

Я пытаюсь глобально отключить Fluent NHibernateотложенной загрузки функции, но даже после того, как:C# Fluent NHibernate вопрос

LazyLoad.Never(); 
DefaultLazy.Never(); 

NHibernate в моем тестовом коде продолжает говорить следующее:

NHibernate.InvalidProxyTypeException: 
The following types may not be used as proxies: 

XXXX: method YYYY should be 'public/protected virtual' 
     or 'protected internal virtual' 

I не хотите отмечать произвольные методы моих классов как виртуальные, если я отключил ленивую загрузку. Имеет ли это решение или, может быть, я что-то делаю неправильно?

+0

этой пост говорит о той же проблеме http://stackoverflow.com/questions/2278110/nhibernate-exception-method-add-should-be-public-protected-virtual -или-защиты – Divi

ответ

2

Если вы отключите Lazy, то Nhibernate попытается получить все ассоциированные свойства (например: - класс Person имеет свойство ассоциации Car), как только вы выберете человека из базы данных.

Чтобы заполнить автомобиль, Nhibernate создает прокси класса человека, наследуя класс человека и переопределяя свойство Carpark.

Если, однако, ваша автомобильная недвижимость не является виртуальной, Nhibernate увидит, включена ли Lazy Loading, и может ли она избежать загрузки свойства, однако это не относится к вашему приложению и, следовательно, к исключению.

Для некоторых легкого чтения: http://davybrion.com/blog/2009/03/must-everything-be-virtual-with-nhibernate/