我有一個名爲「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」評論,但我寧願不改變數據庫結構,也不更改模型。
您的反饋將不勝感激。
通過使用代替查詢 QueryOver ()問題解決了()。這允許像Session.QueryOver ().Where(m => m.Entity是Car);沒有任何運行時異常。 –
UnclePaul
2012-02-24 00:19:31