Nhibernate 急切地获取多个集合:QueryOver和Query之间的差异

Nhibernate 急切地获取多个集合:QueryOver和Query之间的差异,nhibernate,linq-to-nhibernate,queryover,Nhibernate,Linq To Nhibernate,Queryover,我有典型情况的订单/订单行。 我想获取一些订单,并急切地加载带有外部联接的orderslines。 我注意到,如果我使用QueryOver: var orders2 = session.QueryOver<Domain.Order>() .Where(x => x.Company == "HBP00").And(x => x.Number == "VI11001680") .Fetch(x => x.OrderLines).Eager .List(

我有典型情况的订单/订单行。 我想获取一些订单,并急切地加载带有外部联接的orderslines。 我注意到,如果我使用QueryOver:

var orders2 = session.QueryOver<Domain.Order>()
   .Where(x => x.Company == "HBP00").And(x => x.Number == "VI11001680")
   .Fetch(x => x.OrderLines).Eager
   .List();
var orders2=session.QueryOver()
其中(x=>x.公司==“HBP00”)。和(x=>x.编号==“VI11001680”)
.Fetch(x=>x.OrderLines)。急切
.List();
我得到一个笛卡尔积。
订单2包含11行,即使只有一个订单,但实际上它有11个订单行。
如果我使用查询:

var orders1 = session.Query<Domain.Order>()
    .Where(x => x.Company == "HBP00" && x.Number == "VI11001680")
    .Fetch(x => x.OrderLines)
    .ToList();
var orders1=session.Query()
其中(x=>x.公司==“HBP00”和x.编号==“VI11001680”)
.Fetch(x=>x.OrderLines)
.ToList();
一切正常。 有趣的是,我分析了这个查询,它们是相同的。
有什么我必须知道的,才能不让笛卡尔产品急切地加载带有
QueryOver
的集合吗?

我找到了一个解决方案

显然,您需要将
.TransformUsing(Transformers.distinctroventy)
与CreateQuery、CreateCriteria或QueryOver一起使用,但在查询中不需要它

下面是我如何修复它的:

var orders2 = session.QueryOver<Domain.Order>()
   .Where(x => x.Company == "HBP00").And(x => x.Number == "VI11001680")
   .Fetch(x => x.OrderLines).Eager
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();
var orders2=session.QueryOver()
其中(x=>x.公司==“HBP00”)。和(x=>x.编号==“VI11001680”)
.Fetch(x=>x.OrderLines)。急切
.变压器使用(变压器.距离)
.List();

我找到了一个解决方案

显然,您需要将
.TransformUsing(Transformers.distinctroventy)
与CreateQuery、CreateCriteria或QueryOver一起使用,但在查询中不需要它

下面是我如何修复它的:

var orders2 = session.QueryOver<Domain.Order>()
   .Where(x => x.Company == "HBP00").And(x => x.Number == "VI11001680")
   .Fetch(x => x.OrderLines).Eager
   .TransformUsing(Transformers.DistinctRootEntity)
   .List();
var orders2=session.QueryOver()
其中(x=>x.公司==“HBP00”)。和(x=>x.编号==“VI11001680”)
.Fetch(x=>x.OrderLines)。急切
.变压器使用(变压器.距离)
.List();