NHibernate,子实体不会延迟加载

时间:2018-11-27 14:09:50

标签: nhibernate lazy-loading

为什么孩子们渴望装载食物?

这是关系:

public class Order 
{

    private IList<Product> _Product;
    public virtual IReadOnlyCollection<Product> Products { get => _Product.ToList(); }
}

public class Product
{
     private IList<Item> _Item;
     protected internal virtual IReadOnlyCollection<Item> Items { get => _Item.ToList(); }
}

public class Item
{
     private string _name;
     public string Name { get => _name; }

     private decimal _quantity;
     public decimal Quantity { get => _quantity; }
}

一些从数据库获取聚合的方法

void Get(aggregateId)
{
    var q = await Session.GetAsync<TAggregate>(aggregateId, cancellationToken);

    var y = q as Order;

    if (NHibernateUtil.IsInitialized(y.Products)) /// => TRUE
}  

订单和产品的配置

OrderConfiguration:

    mapping
        .HasMany<Product>(Reveal.Member<Order>("Products"))
        .Access.LowerCaseField(Prefix.Underscore)
        .Cascade.AllDeleteOrphan()
        .Not.KeyNullable()
        .Not.KeyUpdate()
        .LazyLoad();

ProductConfiguration

        mapping
            .HasMany<Item>(Reveal.Member<Product>("Items"))
            .LazyLoad()
            .Component(
                composit =>
                {
                    composit
                        .Map(instruction => instruction.Name)
                        .Column("Name")
                        .Not.Nullable();

                    composit
                        .Map(instruction => instruction.Quantity)
                        .Column("Quantity")
                        .Not.Nullable();
                });

为什么NHibernate渴望加载所有数据而不是仅在需要时才等待加载?

如何使它变得懒惰?

1 个答案:

答案 0 :(得分:1)

您在ToList()_Product集合上使用_Item会无意中触发延迟加载。