Извините, не уверен, что вы поняли свой вопрос.
Если вам нужно реализовать его для определенного класса, вы можете просто использовать SetFetchMode.
var query = session.CreateCriteria(typeof(MyClass));
query.SetFetchMode("PropertyA", FetchMode.Select);
query.SetFetchMode("PropertyB", FetchMode.Select);
Примечание: для ссылок «многие-к-одному» сам класс сущности должен отображаться с помощью lazy = true. Если нет, NHibernate даже не создает прокси-класс для него.
Это ответ, если вы хотите лениво загрузить тип универсальным, независимым от типа способом:
Вы можете найти их с метаданными и добавить режимы выборки к критерию
Я не пробовал, но я бы начал со следующего кода:
var meta = sessionfactory.GetClassMetaData(typeof(MyClass));
var query = session.CreateCriteria(typeof(MyClass));
for(int index = 0; index < meta.PropertyType.Length; index++)
{
if (meta.PropertyType[index] == NHibernateUtil.Entity)
{
query.SetFetchMode(meta.PropertyNames[index], FetchMode.Select);
}
}
Сюда не входят коллекции. Они, вероятно, найдены с factory.GetCollectionMetadata(roleName)
, но вам нужно выяснить roleName
.