我想知道如何跟隨DDD的人繞過使用EF和存儲庫模式的潛在性能問題,並返回帶有子級的聚合根。DDD存儲庫EF性能
例如父 -----孩子A
甚至例如家長 ----- Child A級 -------兒童A2
- 如果我從倉庫中帶回的聚合根的數據,並使用導航屬性EF然後觸發了另一個查詢,因爲它是利用懶加載。這是一個問題,因爲我們在循環中遇到100多個查詢。
- 如果我使用'Include'語句從存儲庫中帶回子數據的聚合根數據以及'Include'語句,這將從存儲庫帶回父節點的子數據。然後,當我使用導航屬性時,由於該數據已存在於內存中,因此沒有查詢會被觸發。
第二種方法的問題是,我們的一些孩子對象的數據可能很大,例如100,000+條記錄。 很顯然,我不想爲孩子存儲10萬條以上的記錄。我們決定一次使用分頁來選擇10來解決這個問題,但另一個問題是當我們試圖使用像sum,total count等孩子的計算,但我們只能在內存中記錄我們擁有的10條記錄拉回來。
我知道DDD的辦法就是拉回來對象圖與它的所有內存中的數據,然後您完成您需要顯示的數據對象遍歷。
我們的團隊中存在分裂,有些人認爲我們應該撤回聚合根和它們的孩子在一起,有些人認爲我們應該有一個聚合根存儲庫的方法,直接查詢兒童數據並將子對象拉回。
我只是想知道其他人如何解決大量數據與父/子存儲在內存中的性能問題。
也許你必須在某些情況下重新建模/分割你的實體。此外,不要忘記,您可能必須在複雜場景中丟棄LINQ查詢,並將存儲過程映射到實體數據模型。這也可以提高性能。 – hoetz 2012-07-11 08:37:55