【发布时间】:2015-04-22 04:24:23
【问题描述】:
好的,所以我有以下数据库架构
并且关系是一对多的关系(一个相册可以有很多图片)
映射看起来像这样:
<property name="NumID"...>
<.../>
</property>
<set name="Images" inverse="true" cascade="delete" generic="true">
<key>
<column name="AlbumID" />
</key>
<one-to-many class="Images" />
</set>
并且默认抓取设置为惰性
现在解决问题: 我想加载包含图片的相册(我知道 NumID)
我会使用以下 SQL 来做到这一点:
select * from Images img
join Albums alb
on alb.NumId = img.AlbumId
where img.NumID = 1026
但是在 NHibernate 中我该怎么做呢?当然,我尝试了很多不同的方法,取得了不同程度的成功,但没有什么比它本身的 SQL 更简单了。
作为一个加重因素,我确实需要整个对象(专辑)(或者至少我需要 NumID 和 Name,而不是延迟加载)
我试过这个:
/* 1 */
var tmp1 = session.QueryOver<Images>()
.Where(i => i.NumID == ImageID) //The ImageID is for example 1026
.JoinQueryOver(i => i.Album)
.Select(x => x.Album)
.List<Album>();
// Decent to read, but this only loads the NumID from the album
/* 2 */
var tmp2 = session.Query<Images>()
.Join(DBContext.GetQuery<Albums>(), i => i.Albums.NumID, a => a.NumID,
(imgAlias, albAlias) => new {imgAlias, albAlias})
.Where(x => x.imgAlias.NumID == ImageID) //ImageID = 1026
.Select(x => x.albAlias).ToList();
// This one actually works, but it's almost totally unreadable!
应该怎么做?
【问题讨论】:
-
您想要找到的相册的所有图片,还是只想要相册的第 1026 张图片?
-
@xantos 不,我只想加载包含 NumID = 1026 图像的相册
-
你需要这张专辑的图片吗?没有,1026,全部?
-
@xantos 我不需要任何图片,我只需要名称(和 NumID)
标签: c# sql linq nhibernate