2013-04-20 73 views
0

我有以下類:如何忽略lazy =「false」映射?

public class PurchaseOrder 
{ 
    ... 
    Store Store { get; protected set; } 
    User CreatedBy { get; protected set; } 
    User ApprovedBy { get; protected set; } 
    ... 
} 

用戶和存儲類映射懶=「假」的選項。

<class name="User" lazy="false"> 

更說他們關聯到與lazy="false"選項映射一些其他實體。 我不允許改變它。這不是「我的」類,它們屬於其他域。

我的問題是,每次我獲取PurchaseOrder時,都會產生對這些類及其依賴項的額外查詢,導致我選擇N + 1問題。在99%的情況下,我不需要所有的信息 - 商店ID和用戶ID對我來說已經足夠了。 試圖使用...

session.CreateCreteria<PurchaseOrder>() 
    ... 
    .SetFetchMode("CreatedBy", FetchMode.Lazy) 
    .SetFetchMode("ApprovedBy", FetchMode.Lazy) 
    .SetFetchMode("Store", FetchMode.Lazy) 
    ... 

..但它沒有幫助。

我該如何強制這些協會懶惰,並忽略lazy="false"

只是要清楚。存儲在User和Store類中的信息對我的域沒有用處。所以我不希望它被取回。另外,如果我加入用戶和商店在我的查詢中,它將導致實體的查詢鏈也被映射爲lazy =「false」(不要問爲什麼,我不能改變它)。我遵循一些公司的標準,必須引用這些類(我不喜歡它,但這是一條規則),但我不想獲取他們的數據,我希望它很懶。

回答

2

您無法覆蓋lazy="false"

你可以做的是與你所做的完全相反:熱切地獲取(FetchMode.EagerFetchMode.Join,它們是同義詞)。

+0

我不想獲取關聯用戶和存儲。 – 2013-04-21 08:17:51

+2

然後,你必須與創建映射的白癡交談。如上所述,它不能被覆蓋。或者,您可以使用投影,但會失去所有形式的更改跟蹤,身份地圖等。建議閱讀(對於您和您的同事):http://ayende.com/blog/4573/nhibernate-is-懶剛剛活帶,它 – 2013-04-22 03:03:36

相關問題