1

我在使用 Linq to NHibernate 加载对象并急切加载子集合时遇到问题。对象如下所示:

public class Order
{
    public Guid Id {get; set; }
    public IList<OrderLine> OrderLines {get;set;}
}
public class OrderLine
{
    public Guid Id {get;set;}
    public string Item {get;set;}
}

我正在尝试使用 Linq 加载具有特定 ID 和(急切地)所有子 OrderLines 的订单。我的查询如下所示:

using (var s = _sessionFactory.OpenSession())
using (var tx = s.BeginTransaction())
{
    var order = from o in s.Linq<Order>().Expand("OrderLines")
                where o.Id == id
                select o;
    return order.First();
}

但是,当我显示订单时,该OrderLines属性只包含一个对象——数据库肯定有 3 个。奇怪的是,如果我在返回之前执行一次 foreach,order我确实得到了所有 3 个子项——但这会命中数据库两次。

我已经尝试修改查询以使用Single(),但这也不起作用。

我对 linq 做错了吗?还是我的用法Expand不正确?

在此先感谢,
西蒙。

注意:我使用 FluentNHibernate Automapping 来创建我的 NH Mapping,我的数据库是一个 Sqlite 数据库(一个文件,不在内存中)。

4

1 回答 1

2

看来这个功能有一个bug:

FirstOrDefault() 打破 FetchType=join 与 Linq 到 NHibernate

看一下生成的数据库查询,如果它有 TOP 1 子句,这可能是问题所在。

请记住,Linq to NHibernate 还远未准备好生产,因此可能会出现这种错误。

于 2009-05-24T13:42:58.150 回答