NHibernate使用Criteria API加载子元素/集合

时间:2012-05-04 18:55:28

标签: c# nhibernate collections eager-loading

如何使用Criteria API加载子元素和子集合。我已经阅读了我在谷歌上可以找到的每个链接,但是子元素不会被加载。

这是我的设置

订单包含OrderItems,并在我的DTO中指定

在订单的流畅映射功能中,我有以下显着的行:

LazyLoad();
this.HasMany<OrderItems>(x => x.OrderItems).KeyColumns.Add(new[] { "OrderId"});

在我的存储库类中,我从我的条件类创建查询并检索列表:

DetachedCriteria query = criteria.CreateCriteria();
IList<Orders> myOrders = 
    query.GetExecutableCriteria(UnitOfWork.CurrentSession).List<Orders>();

当我尝试访问myOrders.OrderItems时,它们是空的(它们肯定在我的数据库中)。我假设映射函数中的LazyLoad()调用将启用此...

所以我试着像这样急切地加载:

query.SetFetchMode("Orders.OrderItems", NHibernate.FetchMode.Eager)

这也不起作用。

我哪里错了?

1 个答案:

答案 0 :(得分:0)

尝试此映射供您参考:

this.References<OrderItems>(x => x.OrderItems)
    .Column("OrderId")
    .LazyLoad();

this.References<OrderItems>(x => x.OrderItems)
    .Column("OrderId")
    .Not.LazyLoad();