2010-01-17 84 views
0

我試圖讓什麼似乎是與SQL服務器功能NHibernate的高級使用。
我使用NHibernate的ICriteria接口爲我的列表視圖提供分頁,排序和過濾。 業務對象之一是來自3個不同表的項目的聚合。 爲了做到這一點在數據庫中聚合我已經使用了一個transact-sql函數,接受參數。
我使用由session.GetNamedQuery返回的IQuery接口來調用該函數。但爲了使用分頁/過濾/排序代碼,我想使用ICriteria接口。 從而實現了,我認爲:與NHibernate使用臨時表

  1. 打開一個新的事務
  2. 調用,這將創建一個全局臨時表的功能(而不是返回象現在這樣的結果)
  3. 在某種程度上改變了NHibernate的所以它適用於臨時表(不知道我能做到這一點,也必須具體到我創建交易的範圍內......)
  4. 使用新映射在新表上運行查詢,使用新映射ICriteria接口
  5. 刪除t他臨時表

等等一系列的問題:

  1. 你能提出替代?
  2. 是否有可能在運行時替換NHibernate映射中的表,在本地爲特定的代碼範圍?
  3. 生成和處理臨時表會花多少錢?
+1

我不能提出一種替代的時候,我不知道在哪裏,表示建議爲替代。什麼是類,什麼是表?使用臨時表來描述你所描述的內容聽起來很奇怪,但也許在你使用它的上下文中是合乎邏輯的? – Paco 2010-01-17 13:22:19

+0

我同意Paco,我沒有看到臨時表的需要.. – 2010-01-17 15:33:20

回答

1

你可以用視圖替換函數嗎?這個視圖可以聚合3個表格,由NHibernate映射,並且可以輕鬆分頁/排序/過濾。

+0

我可以做到這一點,但它會損害性能,因爲連接將在3個表中的所有行上執行,與我使用的連接在爲特定的外鍵完成的功能中。我希望能儘快提供更多信息,正如@Paco所建議的那樣,請原諒我的延遲......謝謝! – 2010-01-19 13:38:55