【问题标题】:Are all NHibernate References LazyLoaded by default?默认情况下,所有 NHibernate 引用都是 LazyLoaded 吗?
【发布时间】:2011-04-17 18:56:38
【问题描述】:

我有一个(虚构的)带有 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-reference 是延迟加载的,但 References-reference 似乎不是延迟加载的。这是预期的吗?我需要明确说明吗?

var fromDb = Session.Get<Customer>(id); 
Assert.That(!NHibernateUtil.IsInitialized(fromDb.Orders));
Assert.That(!NHibernateUtil.IsInitialized(fromDb.Reponsible)); // <-- fails

【问题讨论】:

    标签: .net nhibernate fluent-nhibernate mapping lazy-loading


    【解决方案1】:

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

    【讨论】:

    • 谢谢。是的 - 这就是我的想法。我不加载责任比我在会话的其他地方加载订单更多,但我会尝试将测试隔离到一个单独的会话中..
    猜你喜欢
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多