2012-02-23 12 views
2

我有一個名爲「Comment」的類引用了一個名爲「Entity」的抽象類型。流暢-類映射看起來很相似的屬性「實體」以下內容:如何在Fluent-nHibernate查詢中指定單個屬性(鑑別器)的類型/類。

classMap.ReferencesAny(x => x.Entity) 
    .EntityTypeColumn("DiscriminatorType") 
    .EntityIdentifierColumn("DiscriminatorId") 
    .IdentityType<int>() 
    .AddMetaValue(typeof(Car), typeof(Car).Name); 
    .AddMetaValue(typeof(House), typeof(House).Name); 

正如你可能從類「實體」上面的例子中已經發現了由一個名爲「家」類的子類和稱爲「汽車」的類。通過這種設置,通過簡單地執行以下操作來檢索特定於「實體」的所有註釋是相當簡單的:Session.Query()。其中​​(m => m.Entity == myCarObject).ToList()。一切都像一個魅力。

下面是簡單的類結構:

abstract class Entity{} 
class Car : Entity{} 
class House : Entity{} 

class Comment 
{ 
    public virtual Entity { get; set;} 
} 

然而,在一個使用情況下,我需要檢索的引用任何「汽車」,「評論」的所有實例。換句話說,我想實現像下面這樣:

var allCommentsOnCars1 = Session.Query<Comment>().Where(m => m.Entity is Car); //or 
var allCommentsOnCars2 = Session.Query<Comment>().Where(m => m.Entity.GetType() == typeof(Car)); 

兩個例子不工作(後者拋出一個的GetType()未實現的例外),但有可能無論如何解決這個問題?很可能我可以通過創建兩個獨立表格來輕鬆清除我的問題:一個用於所有「Cars」評論,另一個用於所有「Houses」評論,但我寧願不改變數據庫結構,也不更改模型。

您的反饋將不勝感激。

+0

通過使用代替查詢 QueryOver ()問題解決了()。這允許像Session.QueryOver ().Where(m => m.Entity是Car);沒有任何運行時異常。 – UnclePaul 2012-02-24 00:19:31

回答

-1

可能不是最優雅的解決方案,但我通過簡單地使用QueryOver()而不是Query()來解決問題。

+0

你可以發佈解決方案嗎? – 2013-12-05 02:06:51

相關問題