Nhibernate 急切地获取多个集合:QueryOver和Query之间的差异
我有典型情况的订单/订单行。 我想获取一些订单,并急切地加载带有外部联接的orderslines。 我注意到,如果我使用QueryOver: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(
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();