【发布时间】:2012-06-01 21:43:40
【问题描述】:
我有一个由以下 3 个表组成的多对多关系(不相关的字段已从简洁中删除),其中一个广告可以分配多个标签,一个标签可以分配给多个广告。
广告
(PK) Id
广告标签
(FK) AdvertId
(FK) TagId
标签
(PK) Id
我想创建一个 NHibernate 查询来计算分配了特定标签(即特定 TagId)的广告数。
在普通的 sql 中,我会按照以下方式做一些事情:
SELECT COUNT(*)
FROM Adverts A
JOIN AdvertsTags AT ON A.Id = AT.AdvertId
WHERE AT.TagId = @tagId
我的Advert 和Tag 模型的属性名称与上表中的字段名称一致。
我不知道使用 NHibernate 的推荐方法是什么?
【问题讨论】:
-
假设您的对象映射正确,是否有原因您不能按 Id 检索标签然后使用 Tag.Adverts.Count?
-
我认为这会对性能产生影响,检索所有广告的完整列表然后对其进行计数(当我不需要分配给给定的广告的完整列表时)标记,只是计数 - 当我需要分配给标记的广告列表时,我将有分页方法一次只返回 x 行,我需要)。
-
如果我正确理解了 NHibernate 实现,延迟加载集合并在其上调用 Count() 不应导致将所有项目存储在内存中。如果您已经有一个数据库启动并运行,您可以检查 nhibernate 生成的查询。当然,考虑到您已经有一个公认的答案,它可能不再相关了:-)
标签: asp.net nhibernate nhibernate-criteria