一些快速NHibernate的問題:NHibernate如何使標準內部連接沒有保溼對象?
我有SQL表:
Item { Id, Name }
ItemRange { Id, Name }
ItemHasItemRange { Id, ItemId, ItemRangeId }
映射是簡單的,所以我不會將它們粘貼,該項目Id和ItemRangeId外鍵,項目類有ItemHasItemRanges集合映射爲懶惰袋。
我想要特別是ItemRange的所有項目,但我不想檢索關聯的ItemRangeObjects,我只是想做內部連接來縮小結果。
當我那樣做:
c.CreateCriteria("Item", "i")
.CreateAlias("ItemHasItemRanges", "ihpr", JoinType.InnerJoin)
.Add(Restrictions.Eq("ihpr.ItemRange.Id", I18nHelper.CurrentItemRange.Id));
它工作正常,但所有ItemHasItemRange對象獲取以及在Item.ItemHasItemRanges集合(其被映射爲懶惰)
我不想獲取Item.ItemHasItemRanges,因爲它需要時間。我只是想進行內部連接來限制結果集。 NHibernate中可能嗎?
當您使用'CreateCriteria'而不是'CreateAlias'時會發生什麼? – 2011-03-14 09:14:50
IMO,它應該按照您的預期工作。你可以嘗試在查詢中顯式設置FetchMode(使用'SetFetchMode')。 – 2011-03-14 09:31:41
我已經嘗試與'.SetFetchMode(「ItemHasItemRanges」,FetchMode.Lazy);' - 生成的查詢是相同的。同樣的事情'CreateCriteria' - 據我所知,CreateCriteria不同於CreateAlias只是通過返回的對象植根於新的標準,而不是我們開始的標準。所有字段仍然在選擇列表中,即使是那些應該是懶惰的。 – Adam 2011-03-14 10:12:08