NHibernate,child 实体未延迟加载

NHibernate, child entities are not lazy loaded

为什么 children 急切加载?

这是关系:

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
}  

订单和产品的配置

订单配置:

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

产品配置

        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 会立即加载所有数据,而不是等待数据在需要时加载?

这怎么能变得懒惰?

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