[英]NHibernate Linq Query Where(x => x is Base Class) doesn't get derived objects
假设我有以下结构,用鉴别器映射(每个层次结构的表):
Entity (abstract, no discriminator)
|
Animal (abstract, no discriminator)
/ \
Dog (1) Cat(2)
如果我使用 Linq to NHibernate 对此进行查询:
.Where(x => x.Entity is Animal)
我没有结果。 在查看生成的查询时,我希望看到:
where type in (1, 2)
但是我得到了这个:
where type='animal'
Animal 是抽象的,甚至没有鉴别器,因此生成的查询毫无意义。
深入挖掘一下,我发现查询在内部被转换为类似于 HQL 中的WHERE x.class=animal
的内容。 这是 Linq to NHibernate 中的错误吗? 或者这是预期的行为?
使用时是否得到预期的结果
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
,它不处理多态性并且仅采用指定类的鉴别器值,该值默认为其类名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.