我有一个映射到一个表的类层次结构。有一个超类和8个不同的子类。我的很多查询都需要获取,例如2个子类仅适用于特定日期。 该表有一个nhibernate自己使用的鉴别器列。但是当使用LINQ进行查询时,不可能使用这个鉴别器,因为它没有属性。
在使用nhibernate时,是否有一个常用的技巧只能获取特定的子类?
现在我首先使用Linq 4 Nhiberneate查询来获取给定时间段内的所有子类。然后使用Linq 4对象来过滤我需要的子类。
是否可以将表的discriminator列公开为属性,从而能够在其上创建where子句?
答案 0 :(得分:2)
在Hql中查询子类是由类完成的,所以你要做
from subclass
where subclass.DateTime = :myDateTime
文档还说您可以通过特殊的类属性查询层次结构,例如:
from Eg.Cat cat where cat.class = Eg.DomesticCat
我不知道是否可以使用Criteria API或NH Linq Provider。
您总是可以使用正确的时间获取所有实例,然后过滤客户端,例如:
var allCandidates = from super in session.Linq<SuperClass>()
where super.Date > DateTime.Now.AddDays(-1)
select super
var results = from candidate in allCandidates
where candidate.GetType() == typeof(SubClass)
select candidate
这有点讨厌,如果您查询的类的子集总是相同的,那么最好在层次结构中插入另一个类并查询它。