我想知道填充業務對象層次結構(父/子/孫結構)的最佳實踐來自單個數據庫調用。用一個數據庫調用加載業務對象層次結構
我能想到的一對夫婦的方式來完成它關閉我的頭頂部,如:
左加入所有的關係,在我的SQL語句,然後使用循環和邏輯,以填補業務對象
或
使用幾種選擇語句和1周的DataReader並使用其NextResult()方法來遍歷每個結果集,並填寫相應的BO的
只是想知道這種情況的最佳實踐是什麼
我使用DAAB和C#我DAL
謝謝!
我想知道填充業務對象層次結構(父/子/孫結構)的最佳實踐來自單個數據庫調用。用一個數據庫調用加載業務對象層次結構
我能想到的一對夫婦的方式來完成它關閉我的頭頂部,如:
左加入所有的關係,在我的SQL語句,然後使用循環和邏輯,以填補業務對象
或
使用幾種選擇語句和1周的DataReader並使用其NextResult()方法來遍歷每個結果集,並填寫相應的BO的
只是想知道這種情況的最佳實踐是什麼
我使用DAAB和C#我DAL
謝謝!
沒有通用食譜。它取決於數據庫模式,數據庫大小和應用程序在典型場景中讀取的記錄數。您這裏有兩個過程:從數據庫
獲取數據從數據庫比在內存中創建對象要慢幾個數量級。最好的方法是構建用於最快數據訪問的選擇語句。
查詢可以通過三種方式來構建:
您應該決定哪種解決方案可以接受。一些需要考慮的要點:
DataReader NextResult是最好的,因爲通過管道的數據量不會像聯接方法那樣快速增長。
我曾經使用多個返回的數據集,但是開銷,以及不斷變化的API,最終讓我返回到僅僅使用連接將它全部返回到一個大塊。
我一直關注結果集的大小,但在我遇到的任何應用程序的上下文中,這不是問題。總體而言,我並沒有後悔,但是YMMV。
如果父級別選擇子句涉及子級別選擇規則,則多個結果集可能特別松鼠。
這種方式處理所有情況;在某些情況下,將它分開有時會起作用,但最終會需要單個集合的查詢;只有一種模式是很好的 - 尤其是如果你有時陷於從一個到另一個的重構。
最後,最終數據庫的命中次數會減少,事務管理更簡單。
你有沒有考慮使用OR映射如NHibernate的?急切的加載可以完成你在一次調用數據庫時所要求的內容。
如果一個OR映射器不是一個選擇,那麼我會把我的投票放在datareader.NextResultSet的後面。
如果所有行從同一個表(或者看起來是),那麼你可以把數據拉成一個數據集一元關係和ADO.NET將連接層次爲你
你能澄清你的問題??你談論業務對象,然後談論SQL。至少我很困惑。 – Perpetualcoder 2009-01-14 01:10:12