让我们说我有以下结构,用鉴别器映射(每个层次结构的表):
Entity (abstract, no discriminator)
|
Animal (abstract, no discriminator)
/ \
Dog (1) Cat(2)
如果我使用Linq对NHibernate进行查询:
.Where(x => x.Entity is Animal)
我没有结果。查看生成的查询时,我希望看到:
where type in (1, 2)
但我得到了这个:
where type='animal'
动物是抽象的,甚至没有鉴别器,因此生成的查询毫无意义。
深入挖掘我发现查询在内部被翻译成类似于HQL中的WHERE x.class=animal
。这是Linq到NHibernate的一个错误吗?或者是预期的行为?
答案 0 :(得分:1)
答案 1 :(得分:0)
使用时会得到预期的结果吗?
session.Query<Animal>().Select(a => a.yourXEntity).ToList()
或
session.Query<Animal>().SelectMany(a => a.yourXEntityCollection).ToList()
代替?那些人应该处理多态性。
虽然你的lambda x.Entity is Animal
很可能被转换为HQL x.Entity.class = Animal
,它不处理多态,只接受指定类的鉴别器值,默认为其类名。