nhibernate - 带有类型检查 "is"运算符的 Where 子句不使用鉴别​​器

标签 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

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

最佳答案

这个问题和答案应该适合你: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>();

关于nhibernate - 带有类型检查 "is"运算符的 Where 子句不使用鉴别​​器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21696481/

相关文章:

nhibernate - 捕获 NHibernate 生成的 SQL 并在运行前进行修改

nhibernate - 如何更改 Linq-to-Nhibernate 为特定列生成的 SQL?

NHibernate 以我无法控制的行为加载代理对象

NHibernate - 加入没有映射

nhibernate - 使用 NHibernate 将属性映射到另一个表

NHibernate QueryOver(通用),告诉查询应该使用通用类的哪些属性

java - 将对象类型作为参数传递给方法?

c# - Linq 到 NHibernate : 'System.Linq.EnumerableQuery` 1[Entity]' cannot be converted

c# - Nhibernate - 与 Cascade all-delete-orphan 一对一映射,不删除孤儿

java - 从多对多关系的表中删除记录?