我想知道填充具有子對象集合的對象的最佳方式,並且每個子對象都可以有一個對象集合,從數據庫中不需要對數據庫進行多次調用即可獲得每個對象的子對象。基本上採用分層格式,例如客戶有訂單,每個訂單都有訂單項目。最好是以xml格式(SQL Server 2005)檢索數據,還是通過將相關表連接在一起然後將該數據映射到對象來檢索數據集?在此先感謝您的幫助。從數據庫填充對象圖
回答
有很多的變數仍然存在:
- 是同一類型的子對象?如果是這樣,你可以同時選擇它們,然後在對象映射圖層中設置父/子關係。
- 孩子的物體可以有自己的孩子嗎?如果嵌套是無限制的,那麼除非獲得所有數據,否則無法同時獲得所有數據。
您當然可以在所有的客戶 - >訂單 - >訂購項目上加入一切,並在代碼中打破一切,但似乎這樣會在重複的父行中產生大量的開銷,在處理這個大混亂的工作。
試圖避免進行多次呼叫可能是一種過早的優化。對數據庫進行太多調用會帶來性能問題嗎?
編輯:根據您的意見,您應該能夠做到每個層級一個查詢:
Select * from orders
where orders.customerid = my_customer_id
--Do一些ORM映射,使子對象的列表ids--
Select * from child_order_object
where child_order_object_id in (list of child object ids)
--Do一些ORM映射和鏈接子對象以前父objects--
...
--Repeat更多幾層
你應該能夠讓每個關係的水平,而不是查詢的爆炸性增長只是一個查詢由得到的只是一個對象ID。
不,子對象的類型不同。是的,當我需要一次性檢索大量數據時,它會導致性能問題,而且我認爲這不是有效的方式。可以說客戶有30個訂單,並且假設每個訂單都有另外一個子訂單項集合,也就是60個調用來檢索客戶的所有訂單(每個訂單有兩個數據庫調用),完全填充子對象。這只是一個用來解釋問題的例子。 – RKP 2010-05-04 17:35:10
我們在我們的項目中沒有使用任何ORM工具,因此目前不可能將所有現有數據訪問代碼轉換爲使用該工具。所以我想或者我需要檢索一個連接的數據集,然後解析它來構造對象的層次結構或從數據庫中獲取一個xml。無論如何感謝信息。 – RKP 2010-05-24 13:18:29
您可以查看ORM s,例如NHibernate和Entity Framework,它們是專門針對這種情況而設計的。
ORM仍然會對數據庫進行多次調用,對嗎? – 2010-05-04 17:07:05
@Tiberiu Ana - 只能說NHibernate,但可以通過使用預先獲取或在HQL語法中指定連接來避免多個數據庫調用。 – 2010-05-04 17:09:09
我想看看那個證明。除非它使用遞歸查詢,或者它一次讀取表中的每個對象,否則它將不得不多次訪問數據庫。我不認爲很多NHibernate支持的數據庫都支持遞歸查詢。 – 2010-05-04 17:13:00
MS SQL 2005支持Common Table Expressions,可用於此目的。基本上他們允許你做一個遞歸查詢。在CTE/MS SQL上做一個關鍵字搜索,你會發現很多像這樣的東西:Apply a recursive CTE on grouped table rows (SQL server 2005)
這個問題很舊,但新的答案(如果你使用實體框架)是使用Include方法在對象查詢上。這將急切地加載指定的所有導航屬性。
https://msdn.microsoft.com/en-us/library/bb738708(v=vs.100).aspx
- 1. C#從數據庫填充對象
- 2. 數據庫 - 沒有填充對象
- 3. 從javascript數據對象對象填充圖表問題
- 4. 從數據庫填充列表視圖
- 5. 從Access數據庫填充樹狀圖
- 6. 從數據庫填充achartengine圖
- 7. Treeview從數據庫填充
- 8. 填充從數據庫
- 9. 填充從數據庫
- 10. 從數據庫填充DropDownList
- 11. 填充數據庫從CSV IEnumerable的對象文件
- 12. 從數據庫填充對象 - 你停在哪裏?
- 13. 使用數據庫數據填充圖
- 14. 移動通過對象通過PHP從數據庫填充有對象
- 15. 如何從「對象」數據源填充數據集?
- 16. 填充數組與對象
- 17. 從數據庫中填充ChoiceField
- 18. 從數據庫中填充ListView
- 19. 從數據庫中填充菜單
- 20. Codeigniter從數據庫填充表
- 21. 從vb.net的數據庫表填充CheckBoxList
- 22. 從數據庫填充表佈局
- 23. 從SQLite數據庫填充iphone桌面
- 24. 如何從數據庫填充selectManyListbox
- 25. 如何從Sqlite數據庫填充listview?
- 26. 從數據庫中填充幾個JTextFields
- 27. 從Firebase數據庫填充textView
- 28. 填充陣列從數據庫
- 29. 填充TreeView控件從數據庫
- 30. 從訪問數據庫填充組合
對同一主題的問題,有希望的答案:HTTP://計算器。com/questions/2409228/generate-structured-xml-document-from-hierarchical-table-data-t -sql – 2010-05-04 17:09:10