2014-02-11 166 views
2

我已經在NHibernate中映射了一個類層次結構。就這麼簡單:Where type with type check「is」operator not use discriminator

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 

而不是鑑別器值。我該如何解決它?我是否必須保持我的鑑別器值與類型名稱同步?如果可能,我想避免它。

回答

2

這個問題&答案應該爲你工作: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>(); 
相關問題