我已经在 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/