Nhibernate和索引视图
本文关键字:视图 索引 Nhibernate | 更新日期: 2023-09-27 18:16:07
我有一个包含IList<Photo>
的Album
实体。我想使用NHibernate快速查询所有相册的照片数量。在迁移到NH之前,我有一个使用索引视图的查询:
SELECT a.*, t.PhotoCount
FROM dbo.Album a
LEFT JOIN dbo.vw_AlbumPhotoCount t ON t.AlbumID = a.AlbumID
如何在NHibernate中使用这个视图(vw_AlbumPhotoCount
)来加快查询速度?
更新:我按照亚历克斯的建议映射了一个简单的<one-to-one/>
实体,它为我工作了。这个解决方案的一个缺点-由于one-to-one
属性不能惰性加载,我总是在按id获取专辑时获得LEFT JOIN
。我不能映射这个实体作为<many-to-one/>
属性,我不知道为什么,也许是因为视图没有自己的ID属性。无论如何,映射为<many-to-one/>
后,在获取专辑
我已经检查了我的架构,并决定删除视图。在这种特殊情况下,最好的方法是使用NH缓存系统而不是索引视图
最好的办法可能是将一个简单的实体映射到PhotoCount视图,然后通过普通的方式建立与该实体的关系。只要确保不要缓存这些对象,因为它们实际上永远不会被更新。
一个带有公式的相册属性
// 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();