Все ли ссылки 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 ответ

Решение

Ссылки (многие-к-одному) загружаются лениво по умолчанию. Держу пари, что вы ранее загрузили ответственный объект в том же сеансе, и он был получен из кэша первого уровня, а не из базы данных.

Другие вопросы по тегам