Все ли ссылки NHibernate по умолчанию являются LazyLoaded?
У меня есть (вымышленный) класс с Fluent-Mapping:
public class Customer
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Employee Responsible { get; set; }
public virtual IList<Order> Orders { get; set; }
}
public class CustomerMapping : ClassMap<Customer
{
public CustomerMapping()
{
Id(c => c.Id);
Map(c => c.Name);
References(c => c.Responsible);
HasMany(c => c.Orders);
}
}
Теперь - если я выбираю клиента из базы данных, ссылка на HasMany будет Lazyloaded, но ссылка на ссылки, похоже, не будет загружена с отложенным доступом. Это ожидается? Нужно ли это явно?
var fromDb = Session.Get<Customer>(id);
Assert.That(!NHibernateUtil.IsInitialized(fromDb.Orders));
Assert.That(!NHibernateUtil.IsInitialized(fromDb.Reponsible)); // <-- fails
1 ответ
Решение
Ссылки (многие-к-одному) загружаются лениво по умолчанию. Держу пари, что вы ранее загрузили ответственный объект в том же сеансе, и он был получен из кэша первого уровня, а не из базы данных.