我在使用Linq到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的订单并且(急切地)加载它的所有子订单。我的查询如下:
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.奇怪的是,如果我在返回之前在order
附近做了一个foreach,我会得到所有3子项目 - 但这会两次击中数据库。
我尝试修改查询以使用Single()
代替,但这也不起作用。
我是否对linq做错了什么?或者我使用Expand
是否错误?
提前致谢,
西蒙。
注意:我正在使用FluentNHibernate Automapping来创建我的NH Mapping,而我的数据库是一个Sqlite数据库(一个文件,不在内存中)。
答案 0 :(得分:2)
这个功能似乎有一个错误:
FirstOrDefault() breaks FetchType=join with Linq to NHibernate
看看生成的数据库查询,如果它有TOP 1子句,这可能是问题。
请记住,Linq对NHibernate还远未准备好生产,因此可能会出现这种错误。