2009-06-17 90 views
0

這種情況下,我在我的數據庫表2:你將如何處理與NHibernate

  • 類別
  • BlogEntry

每個BlogEntry具有與之關聯1角或多個Category秒。

如果我想通過它的ID得到一個BlogEntry,我也想得到它的Category信息。

也許這個例子沒有說明一個恰當的場景,但是說我想加載Category ID和Name而不是類別數據庫中的所有其他列。

nHibernate會加載每個實體的所有列/屬性嗎?

回答

0

這取決於你如何映射它。顯然,位代碼檢測可以只允許檢索部分表,但很少需要。

也許你爲什麼只想類別的ID的explainantion ...

如果定義休眠映射和而不必類映射到一個類別對象的實體只是把它作爲一個整數。這是我如何處理我的映射,當我不關心能夠用我原來的查詢獲取附件。

+0

爲什麼?就像我說的,爲了避免加載不需要顯示的列。 – Blankman 2009-06-17 16:24:42

0

你會想看看投影。實際上,我們使用AliasToBean轉換器來讓NHibernate將我們的投影直接轉換爲屏幕特定的DTO。

1

我會通過將其映射爲BlogEntry和Category之間的一對多關聯來處理此問題,以便BlogEntry擁有一個Category類別的集合。我會設置它以便類別集合被延遲加載。我不介意加載更多的列,因爲我正在處理業務對象並通過主鍵或外鍵進行選擇。 NHibernate的工作是擔心這一點,儘管我會在開發過程中使用SQL Profiler或NHProf來檢查它。

NHibernate將通過使用BlogEntry中的外鍵選擇類別記錄來加載集合。在幾乎所有情況下,只有返回將顯示的字段才能獲得性能提升。僅根據顯示要求檢索僅填充所需屬性的業務對象並不是一個好的面向對象的實踐。