1

我有經典的情況Orders/OrderLines。 我想獲取一些訂單,並用外連接熱切加載訂單。 我注意到,如果我使用QueryOver:熱切地獲取多個集合:QueryOver和查詢之間的差異

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

我得到一個笛卡兒積。
orders2包含11行,即使只有一個訂單,但實際上它有11個訂單。
如果我使用查詢:

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

一切正常。 有趣的是我分析了查詢,它們是相同的。 有什麼我不得不知道不要急於用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(); 
相關問題