我有两个表 - Run和Sample,其中Sample.RunId是将样本链接到其运行的外键。
我想在Run中有一个SampleCount属性,它是与特定Run相关联的Sample对象的数量。
是否可以在Run type的NHibernate映射中映射这样的属性?
感谢。
答案 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 ++特性)。