2011-11-30 31 views
0

我有一個Album實體,其中有IList<Photo>。我想用一個快速查詢使用NHibernate來選擇我的所有相冊和照片數量。遷移到NH之前,我不得不使用索引視圖的查詢:Nhibernate和索引視圖

SELECT a.*, t.PhotoCount 
FROM dbo.Album a 
LEFT JOIN dbo.vw_AlbumPhotoCount t ON t.AlbumID = a.AlbumID 

我如何使用NHibernate的這一觀點(vw_AlbumPhotoCount),以加快查詢?

UPDATE: 我映射了一個簡單的<one-to-one/>實體亞歷克斯建議,它爲我工作。這個解決方案的一個缺點 - 作爲one-to-one屬性不能加載懶惰我總是得到LEFT JOIN時通過id提取相冊。我無法將此實體映射爲<many-to-one/>屬性,我不確定爲什麼可能因爲該視圖沒有自己的ID屬性。反正ofter它映射爲<many-to-one/>我取出一張專輯

更新2之後得到了在它空: 我查看了我的架構,並決定刪除該視圖。在這種特殊情況下,最好的辦法是使用NH緩存系統,而不是索引視圖

+0

你最好的選擇可能是將一個簡單的實體映射到你的PhotoCount視圖,然後建立一個這樣的關係。只要確保你不要緩存這些對象。 – AlexCuse

+0

感謝您的回覆。如果您將其作爲答案發布,我會將其標記爲解決方案 – Vladimir

回答

0

你最好的選擇可能是一個簡單的實體映射到您的PHOTOCOUNT看法,然後通過普通的方式與該實體建立關係。只要確保不要緩存這些對象,因爲它們永遠不會實際更新。

0

在專輯中一物業用公式

// Fluent Mapping 
Map(x => x.PhotoCount).Formula("SELECT t.PhotoCount FROM dbo.vw_AlbumPhotoCount t ON t.AlbumID = AlbumID"); 

// xml mapping 
<property name="PhotoCount" formula="SELECT t.PhotoCount FROM dbo.vw_AlbumPhotoCount t ON t.AlbumID = AlbumID"> 

var albums = session.QueryOver<Album>().List(); 
+0

感謝您的回覆,但選擇相冊列表怎麼辦? – Vladimir