2010-05-07 85 views
0

我正在嘗試在日誌上進行投影。日誌引用稱爲公司的超類。每個公司類型都與每個子類的表映射。從NHibernate投影中獲取子類型

是否有可能對我來說,當我做投影上登錄得到公司的類型? 我目前每個子類都有一個Enum屬性(它沒有映射),所以我可以在公司類型上執行開關,但由於它沒有映射到任何東西,所以我無法對它進行投影。

我已經試過Projections.Property("log.Company.class")但是,這並不工作:(

PS:我找不到很多對這個問題的適當的標籤。如果任何人有更多的特定標籤的想法,請告訴我

回答

1

您可以執行下列操作...

session.CreateCriteria<Log>() 
     .CreateAlias("Company", "company") 
     .SetProjection(Projections.Property("company.class")) 

但是,投影只能用於過濾和排序; NHibernate的將不會在結果集(它返回一個整數,這是返回的System.Type內部使用)

如果你需要的是知道具體類型的公司,你可以做到以下幾點:

var logs = session.CreateCriteria<Log>() 
        .SetFetchMode("Company", FetchMode.Join) //avoid SELECT N+1 
        .List<Log>() 

,然後檢索每行的類型:

foreach (var log in logs) 
    string companyClassName = session.GetEntityName(log.Company); 
+1

是這樣可預測?我的意思是,我可以將它翻譯成一個字符串,這基本上是我需要的,以顯示公司的類型? – Siewers 2010-05-08 11:11:05

+0

它可以預測,但只能通過逆向工程。我會爲你所需要的添加一個替代方案。 – 2010-05-08 15:18:45

+0

這看起來不錯,但是不管怎樣,它不是一個連接,因爲我使用每個子類的表? 我會給它一個:) – Siewers 2010-05-08 17:09:31