我在NHibernate中映射了一个类层次结构。很简单:
class abstract Animal
class Dog : Animal
class Cat: Animal
class Cow: Animal
在映射中,我在ANIMAL_TYPE列上设置了鉴别器值:
Dog -> dog
Cat -> cat
Cow -> cow
所有类型的查询都有效。除此之外,当我需要获取两种特定类型的对象时。我写的是这样的:
QueryOver.Of<Animal>().Where(animal => animal is Dog || theme is Cat)
我没有收到任何结果。当我查看生成的查询时,NHibernate生成:
(this_.ANIMAL_TYPE = @p0 or this_.ANIMAL_TYPE = @p1)
这很好,但 @ p0 和 @ p1 参数中的值包含完整的类名,例如
Zoo.Model.Cat
而不是鉴别器值。我该如何解决?我是否必须将鉴别器值与类型名称保持同步?如果可能的话,我想避免它。
答案 0 :(得分:3)
这个问题&amp;答案应该适合您:How can QueryOver be used to filter for a specific class? (在您前一天询问)
var query = session.QueryOver<Animal>()
.Where(animal => animal.GetType() == typeof (Dog)
|| animal.GetType() == typeof (Cat)
);
var list = query.List<Animal>();