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/>后,在获取专辑

后得到null更新2:

我已经检查了我的架构,并决定删除视图。在这种特殊情况下,最好的方法是使用NH缓存系统而不是索引视图

Nhibernate和索引视图

最好的办法可能是将一个简单的实体映射到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();