[英]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.