Dot-Net

LinqToSql 聲明和實例化 DataContext 最佳實踐?

  • February 5, 2019

在設置我的 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。

引用自:https://stackoverflow.com/questions/549393