簡體   English   中英

NHibernate Linq Query Where(x => x is Base Class) 沒有得到派生對象

[英]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 中的錯誤嗎? 或者這是預期的行為?

修復了這個錯誤,將此功能添加到 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM