2016-04-29 95 views
0

我有一個Web應用程序(asp.net + SQL數據庫),我用nHibernate映射它與相對成功=)。nhibernate填充類與來自不同表的自定義數據

該網站從ERP系統讀取Oracle數據庫,收集並顯示數據,但不使用nHibernate執行此任務。

我已經完成了幾個報告,每個報告都有自己的vb.net類,我填充了一些隱含的查詢, 從一堆Oracle表中收集數據。所以我的問題是:

我可以做一個特定的HQL查詢,並填寫自定義的方式我vb.class(也許不是它映射),指定一一其中我的查詢欄填寫每個屬性?

=====================編輯方案=====================

只要有人需要解決方案,我將解決方案發布在示例中。

Public Class classExample 
    Private pProperty1 As Decimal 
    Private pProperty2 As String 

    Public Property Property1() As Decimal 
     Get 
      Property1 = pProperty1 
     End Get 
     Set(ByVal Value As Decimal) 
      pProperty1 = Value 
     End Set 
    End Property 

    Public Property Property2() As String 
     Get 
      Property2 = pProperty2 
     End Get 
     Set(ByVal Value As String) 
      pProperty2 = Value 
     End Set 
    End Property 

    Public Overloads Function Load() As System.Collections.Generic.List(Of classExample) 
     Using session As NHibernate.ISession = ISessionFactory.OpenSession() 
      Dim strsql As String = "SELECT.... FROM...." 
      Dim Query As NHibernate.IQuery = session.CreateSQLQuery(strsql) 
      Query.SetResultTransformer(NHibernate.Transform.Transformers.AliasToBean(Of classExample)) 
      Return Query.List(Of classExample)() 
     End Using 
    End Function 
End Class 

感謝您的幫助。

回答

1

您需要使用結果轉換器作爲here(請參閱第二個代碼塊)。

+0

非常感謝Frédéric!我不知道這些,我正在與班級和地圖作鬥爭,以使他們工作。 =) – Knave

+0

如果您使用命名查詢(在''標籤的映射中寫入的查詢,''定義之外),您應該也可以在映射中執行此操作。這還有一個額外的好處,就是可以在會話工廠引導(在應用程序使用中通常很早)驗證您的查詢,而不是僅在調用時驗證它們(所以也許在您的功能測試覆蓋範圍之外)。 –