2009-10-14 160 views
2

我是一個新的asp.net程序員,我剛纔問了this question,這讓我更加籠統。Linq /數據對象最佳實踐

關於Linq和數據對象的最新實踐是什麼?具體何時;暗淡,新的和處理它們。

另外,在同一頁面的許多不同範圍內使用的對象如何一個用戶數據對象。它們應該是模塊級還是在每個範圍內創建?

如果有人可以給我關於當前最佳實踐的懸崖筆記,或者甚至鏈接到描述它們的文章,我將不勝感激。

回答

0

通常,您希望將作爲參數進行操作的數據作爲參數傳遞給作爲構造函數參數的函數和類型依賴項。因此,例如一個linq數據上下文可能會是你的類型依賴於操作的東西,因此應該注入構造函數中。用於在上下文中查找數據的值將快速更改,並在相同的上下文中重複使用,因此將成爲您類型的函數參數。

但是,如果您的類型是爲了在其生命週期內對多個上下文執行操作而構建的,那麼您可以考慮將上下文作爲函數參數傳遞,但這可能意味着設計問題比其他任何情況都要多。

對於在類型的函數範圍內實例化數據上下文,實際上沒有任何理由在函數中產生這種開銷,除非類型的生命週期只保證函數調用本身的生命週期。即使現在情況如此,未來可能也不會有這種情況,所以最好在設計時考慮這種情況。

2

晨間的想法(我坐在一個會議,所以我不好)

對於ASP.NET,數據上下文的最大壽命是一個職位或回傳。您可以創建更多的內容,但是它們都會隨着頁面卸載而死亡。是的,你應該明確地處理它們; using語句是來處理,因爲當塊結束它會自動調用配置的最佳途徑:

using (NorthwindModel nw = new NorthwindModel()) 
{ 
    do stuff 
} 

這是一個從LINQ查詢不與數據上下文消失返回的數據,但在這一點上它不再連接到上下文,並且更改不能用於更新數據庫。 (您可以隨時創建新的上下文,然後附加爲新對象,或者重新查詢併合並更改,或者任何符合您需要的更改。)

請注意,LINQ查詢不會執行,直到需要評估數據。在處理數據上下文時保留查詢是一個非常容易的錯誤,然後當查詢需要運行時,它不能,因爲它是使用不再存在的數據上下文創建的。有兩種通用的方法來解決這個問題。

  1. 在數據上下文的使用塊內處理查詢結果。
  2. 強制查詢來執行,通常用.ToList()或,將產生的數據的集合某些其他方法:

    列表myCustomers =(從C中nw.Customers選擇C)。ToList();

這會運行查詢,將數據複製到可枚舉集合中,併爲您提供可返回給方法調用方的集合。但是,這些對象現在與上下文分離,因此它們不能用於更新。

如果您使用LINQ進行CRUD,最好對所有更新,刪除和插入使用一個數據上下文,然後對所有更改調用SubmitChanges()一次。這確保它們作爲單個事務運行。 (如果沒有事務正在運行,則數據上下文將爲每個SubmitChanges調用生成一個事務。)

如果要在查詢中選擇一個項目,請使用FirstOrDefault()而不是First()。如果沒有滿足選擇條件,First()將拋出異常,而FirstOrDefault()將返回null。非常有用的知道。

除此之外,玩得開心,嘗試很多東西。 LINQ將改變你對數據的看法。