where类型检查“是”运算符的子句不使用鉴别​​器

时间:2014-02-11 08:16:55

标签: nhibernate nhibernate-mapping nhibernate-criteria

我在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

而不是鉴别器值。我该如何解决?我是否必须将鉴别器值与类型名称保持同步?如果可能的话,我想避免它。

1 个答案:

答案 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>();