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」(不要問爲什麼,我不能改變它)。我遵循一些公司的標準,必須引用這些類(我不喜歡它,但這是一條規則),但我不想獲取他們的數據,我希望它很懶。
我不想獲取關聯用戶和存儲。 – 2013-04-21 08:17:51
然後,你必須與創建映射的白癡交談。如上所述,它不能被覆蓋。或者,您可以使用投影,但會失去所有形式的更改跟蹤,身份地圖等。建議閱讀(對於您和您的同事):http://ayende.com/blog/4573/nhibernate-is-懶剛剛活帶,它 – 2013-04-22 03:03:36