如何使用NHibernate映射SampleCount属性

时间:2010-02-23 21:09:09

标签: nhibernate nhibernate-mapping

我有两个表 - Run和Sample,其中Sample.RunId是将样本链接到其运行的外键。

我想在Run中有一个SampleCount属性,它是与特定Run相关联的Sample对象的数量。

是否可以在Run type的NHibernate映射中映射这样的属性?

感谢。

2 个答案:

答案 0 :(得分:1)

虽然你可以使用<join>来做到这一点,但这不是一个好主意。

相反,将Run.Samples集合声明为lazy="extra",访问Run.Samples.Count将会对计数进行查询,而不是加载整个集合。

答案 1 :(得分:1)

尽管Diego Mijelshon的集合解决方案完全有效,但它确实意味着在获取Run实体后需要额外的查询。如果您尚未映射集合并且您不想要或者您不想要其他查询,请考虑“计算”属性

Run类映射

<property name="SamplesCount" type="long" formula="(select count(s.Id) from Samples s where s.RunId = Id)" />

并在班级Run中添加

long SamplesCount {get; set;}

请注意,在查询中,对于部件“s.RunId = Id”,NHibernate将为根表插入正确的别名。另外,不要忘记括号,它使解析器更容易,在某些情况下也是必需的。

这种方法的好处是可以在选择上应用子查询(根据您的情况,可能会或可能不会很好)。如果这个属性是您很少需要的,那么该属性也可以延迟加载(我认为是NH 2 ++特性)。