2010-01-21 46 views
1

使用linq數據上下文的最佳方式是什麼?鏈接如何與sql連接一起工作(什麼時候打開連接,什麼時候關閉連接)?當我使用數據上下文時,我應該使用使用語句嗎?linq sql如何與sql連接一起工作?

對不起。提前致謝。

回答

6

這裏有很多要說的 - 我會給你我的盆景 - 然後給你一些鏈接等,以幫助你進一步。

本網站還有很多其他類似的問題 - 儘管如此,搜索,你會發現更多。

終身

  • 你不需要使用using語句一個LINQ到SQL的DataContext,但你必須處置它時,你就大功告成了。因此,使用塊是最好的方式,因爲它是try ... finally {}語義。所以,在我看來你應該使用using塊。

  • 你應該保持的LINQ to因爲發生在每次更改跟蹤的SQL數據上下文打開很長一段時間,對象,上下文打開 - 它損害的表演,並可能導致意外的行爲。

  • 據我所知,Sql連接在構造上下文時打開,在處置時關閉。

因此,你應該打開的LINQ to SQL上下文時要選擇,插入,更新或刪除數據,然後將其關閉,一旦你就大功告成了。例如,通過相同的DC插入100條記錄是很好的;正在更新或刪除。但是,我可能不會選擇一種類型的幾千條記錄,更新另一個類型的幾千條記錄,然後在一個上下文中刪除更多的記錄 - 主要是出於性能原因。

相關數據

如果您有相關的數據 - 即表A - 從訪問時>表B,然後知道,在DataContext(DC),默認是懶加載在B中的相關行A上的子屬性。因此,如果打算將一個linq返回到創建和配置用於選擇的DC的代碼之外的sql生成的類,則可以獲得ObjectDisposedException。要避免這種情況 - 您可以使用DataLoadOptions.LoadWith和DataLoadOptions.AssociateWith <>來緩解這種情況 - 當選擇一行時強制預取相關行。這可以增加數據,你的LINQ to SQL從數據庫中讀取,但查詢的量,所以你會通常總是申請的所有相關記錄預取所有查詢 - 只對那些您知道需要他們。

對不起,我不會放棄的代碼示例或其他任何東西 - 有很多在一個答案覆蓋 - 但這裏的一些鏈接:

Rick Strahl talking about Linq To Sql DC lifetimes

Dinesh of Microsoft talking about the same

Scott Guthrie - 9 Part Linq to SQL Series - 這是一個linq在他的博客上進行搜索 - 向下滾動,翻頁,你會發現所有不同的部分,從第一部分開始於2007年5月。

+0

謝謝安德拉斯!你的回答非常棒。代碼示例並不是真的需要... – iburlakov 2010-01-21 11:55:11

+0

很高興能有幫助:) – 2010-01-21 12:11:02