2011-10-28 62 views
2

我想知道是否有人能指引我走向正確的方向。我最近開始使用LinqToSQL並喜歡強類型的數據對象等。LinqToSQL設計查詢/擔心

我只是在努力理解對數據庫性能的影響等。例如,假設我正在開發一個簡單的用戶配置文件頁面。該頁面顯示有關用戶的基本信息,關於其最近活動的一些信息以及未讀通知的列表。

如果我正在爲這個頁面開發一個存儲過程,我可以創建一個SP,它返回覆蓋所有必需信息的多個數據表 - 導致一個數據庫調用。

但是,使用LinqToSQL,這可能會導致許多調用 - 一個用於用戶信息,至少一個用於活動,至少一個用於通知,如果我然後需要關於通知的更多信息,可能會導致進一步調用 - 多個數據庫調用。

我是否應該擔心由於使用此設計模式而導致的db調用數量?也就是說,多個數據庫握手等會降低我的db等嗎?

我很感激你的想法!

感謝 大衛

+0

我不知道Linq to SQL - 我更瞭解Linq to Entities。理想情況下,任何ORM風格的系統都應該緩存呼叫,以便在需要時只呼叫數據庫,儘可能減少出行次數。儘管編寫你的服務器端實現可以利用這個批處理,但是你可以自己決定,而不是強迫ORM分解你的調用(例如,對整個請求只使用一個倉庫/上下文) 「IEnumerable」延遲的全部優點,而不是調用一堆創建和銷燬上下文的函數,並且始終調用「ToList」)。 –

+0

他們還應該利用連接池,所以即使您「關閉連接」,您也只是將它返回到池中。同樣,Linq to Entities也是這樣做的,我不知道Linq to SQL是否可以。 –

+0

[存儲過程的實體框架VS LINQ to SQL VS ADO.NET的可能的重複?](http://stackoverflow.com/questions/2698151/entity-framework-vs-linq-to-sql-vs-ado-net -with-stored-procedures) –

回答

2

,如果你需要走這條路的LINQ to SQL可以消耗從存儲過程的多個結果。不幸的是,設計師有問題正確映射他們,所以你可能需要手動創建你的映射。見http://www.thinqlinq.com/Default/Using-LINQ-to-SQL-to-return-Multiple-Results.aspx

如果您知道每個父記錄都需要它們,您可以配置LINQ to SQL以急切地加載子記錄。使用DataLoadOptions和.LoadWith進行配置。

您還可以在LINQ查詢的Select子句中投影包含多個子集合的對象圖,以減少您創建的數據庫匹配數。

最終,您需要檢查多個選項以確定哪種路線最適合您的情況。這不是一個適合所有情況的方案。

1

它是從性能的角度最糟糕的?是的,應該是。多次往返通常比單次更差。

真正的問題是,你介意嗎?您的應用程序是否會收到足夠的訪問次數以保證存儲過程的複雜性?還是您重視未來對原始性能進行修改的簡單性?

在任何情況下,如果您需要性能,您可以創建存儲過程並將其映射到您的上下文中。這會給你一個單一的電話,但返回的數據作爲對象 下面是一篇文章,解釋了一下有關該選項: linq-to-sql-returning-multiple-result-sets