Dot-Net
LinqToSql 聲明和實例化 DataContext 最佳實踐?
在設置我的 DataContext 以便在我的擴展 LinqToSql 類中輕鬆訪問方面的最佳實踐是什麼?
例如,我的 dbml 中有一個“使用者”實體,我想向該類添加方法,如下所示:
Partial Public Class User Public Function GetUser(ByVal UserID as Integer) as User 'Do Work End Function End Class為了訪問我的 DataContext 我必須在方法中聲明它,如下所示:
Partial Public Class User Public Function GetUser(ByVal UserID as Integer) as User Dim dc as New MyDataContext() Return (From u in dc.Users Where u.ID = UserID).Single() End Function End Class我不想對每種方法都這樣做。通常(如果我沒有擴展 LinqToSql dbml 類)我可以這樣做:
Partial Public Class User Private dc as MyDataContext Public Sub New() dc = new MyDataContext() End Sub Public Function GetUser(ByVal UserID as Integer) as User Return (From u in dc.Users Where u.ID = UserID).Single() End Function Public Function GetAllUsers() as IEnumerable(Of User) Return From u in dc.Users End Function 'etc... End Class這將允許我訪問每個方法的數據上下文,而不必每次都重新聲明它。但是你當然不能這樣做,因為 dbml 已經有一個建構子。如果有任何變化,將程式碼添加到 dbml 中總是會被覆蓋。
有人對如何在這里為自己節省一些多餘的程式碼有什麼好主意嗎?
射線!
首先,確保您在完成後處理您的 DataContext!他可能是一個沉重的小混蛋(編輯實例化不重,但如果您繼續使用它而不處置它,則很重);您不希望舊的 DataContexts 在記憶體中徘徊。
其次,DataContext 旨在表示單個邏輯事務。例如,您應該在每次要開始新事務時創建一個新事務,並在該事務完成時將其刪除。因此,出於您的目的,這可能是該
GetUser方法的範圍。如果您有一系列需要作為一個組進行的 DB 呼叫,則在擺脫它之前,它們都應該使用相同的 DC。