代码之家  ›  专栏  ›  技术社区  ›  stiank81

默认情况下是否所有NHibernate引用都是Lazyload?

  •  0
  • stiank81  · 技术社区  · 14 年前

    我有一个(虚构的)具有流畅映射的类:

    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引用是Lazyload的,但引用引用似乎不是Lazy加载的。这是预期的吗?我需要明确地说出来吗?

    var fromDb = Session.Get<Customer>(id); 
    Assert.That(!NHibernateUtil.IsInitialized(fromDb.Orders));
    Assert.That(!NHibernateUtil.IsInitialized(fromDb.Reponsible)); // <-- fails
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   Jamie Ide    14 年前

    默认情况下,引用(多对一)是惰性加载的。我敢打赌,您以前在同一个会话中加载了负责的对象,它是从一级缓存(而不是从数据库)中检索到的。