2011-02-25 77 views
2

我用Fluent NHibernate和DiscriminateSubClassesOnColumn()來支持子類化。用於區分子類的列未映射到實體上的實際屬性。如何查詢特定類型的NHibernate?

如何創建只返回給定類型的實體的查詢?

這裏是我的嘗試,其中propertyName爲我鑑別列和值的名稱是類型名稱:

return _db.CreateCriteria<T>() 
      .Add(Restrictions.Eq(propertyName, value)) 
      .List<T>(); 

然而,這給我的錯誤「無法解析屬性:類型:[我的實體類型]「,這是因爲該實體本身沒有該屬性。如果我將屬性添加到我的實體並將其映射,則會出現另一個錯誤:「System.IndexOutOfRangeException:Count = 7的此SqlParameterCollection的索引7無效。」

回答

3

您傳遞類型的泛型參數T.例如,如果貓與狗擴展抽象類動物:

return _db.CreateCriteria<Cat>() 
     .List<Cat>(); 

返回所有貓

return _db.CreateCriteria<Animal>() 
     .List<Animal>(); 

回報貓和狗。

0

你應該只創建一個標準的基礎上,你感興趣的子類例如,如果你的實體層次結構包含從EntityA衍生EntityB,只是想和你EntityB只是做:

session.CreateCriteria<EntityB>().List(); 

,你會得到所有類型實體B的實體沒有理由明確地處理鑑別器。