好吧我試圖加載我的用戶對象(關注者,關注,PostLikes,CommentLikes)上的許多到很多集合。但是,當我使用QueryOver對這些集合執行左連接時,它將返回比應該返回更多的記錄。nHibernate QueryOver執行一個SubSelect加載一個集合,而不是一個加入
我用SQL Profiler查看了SQL,它似乎不是僅生成4個連接而是生成8創建一個有點循環的查詢。這是我目前的查詢。
User userAlias = null;
User followingAlias = null;
User followersAlias = null;
Post postLikesAlias = null;
Comment commentLikesAlias = null;
var entity = Session.QueryOver(() => userAlias)
.Where(x => x.Id == id)
.Left.JoinAlias(() => userAlias.Followers,() => followersAlias)
.Left.JoinAlias(() => userAlias.Following,() => followingAlias)
.Left.JoinAlias(() => userAlias.PostLikes,() => postLikesAlias)
.Left.JoinAlias(() => userAlias.CommentLikes,() => commentLikesAlias)
.SingleOrDefault();
ReleaseCurrentSession();
return entity;
無論如何,當我沒有選擇性地加載東西,並通過我流利的映射使用急切的加載。集合加載完美。我再次查看了Sql Profiler,它似乎爲每個集合執行一個單獨的選擇查詢。有沒有一種方法可以使用QueryOver來代替使用聯接?我知道在你的映射中你可以指定FetchTypes,但是當我這樣做,只使用.Fetch(x => x.Followers)等它仍然會產生連接!
在先進的感謝,
喬恩