1

나는 고전적인 주문 Orders/OrderLines를 가지고 있습니다. 일부 주문을 가져 와서 외부 조인을 통해 주문 라인을 열심히로드하려고했습니다. 여러 컬렉션을 열심히 가져옵니다. QueryOver와 쿼리의 차이점

var orders2 = session.QueryOver<Domain.Order>() 
    .Where(x => x.Company == "HBP00").And(x => x.Number == "VI11001680") 
    .Fetch(x => x.OrderLines).Eager 
    .List(); 

내가 카티 제품을 얻을 : 나는 QueryOver를 사용하는 경우 것으로 나타났습니다.
orders2에는 단 하나의 주문이 있더라도 11 개의 행이 들어 있지만 실제로는 11 개의 주문 행이 있습니다.
내가 쿼리를 사용하는 경우 :

var orders1 = session.Query<Domain.Order>() 
    .Where(x => x.Company == "HBP00" && x.Number == "VI11001680") 
    .Fetch(x => x.OrderLines) 
    .ToList(); 

모든 것이 제대로 작동합니다. 재미있는 점은 쿼리를 분석 한 결과 동일하다는 것입니다. Cartesian 제품을 열망하여 QueryOver로 컬렉션을로드하지 못하도록해야합니까?

미리 감사드립니다.

답변

3

해결 방법은 this blog입니다.

분명히 CreateQuery, CreateCriteria 또는 QueryOver가있는 .TransformUsing(Transformers.DistinctRootEntity)이 필요하지만 Query에서는이 것이 필요하지 않습니다.

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(); 
: 여기

내가 그것을 해결 방법

관련 문제