2013-07-19 127 views
1

我正在創建一個ASP .Net網站,並且想爲我的數據層使用Linq to SQL類,然後有另一個將服務數據層的項目。林Linq to SQL相當新。Linq to SQL DataContext的用法

我擁有的結構是一個接口,它列出了我在單獨的接口中爲數據庫中的每個表所需的所有CRUD(創建,讀取,更新和刪除)操作。

然後我有另一個類,它實現的接口是我寫我的代碼來獲取,更新,刪除數據等即

Public Function GetCustomers As Iqueryable(of Customer) 
Dim Service as New StoreDataContext 
Return From c in Service.Customers select c 
End Function 

什麼我注意到我總是在所有寫昏暗的服務作爲新StoreDataContext我的方法是爲了對我的數據做任何事情。

這使我想到並在每個類中創建一個屬性,並用datacontext初始化該屬性。多走了一步好我想創建一個爲MustInherit類,所以所有的類會再繼承這個類,並需要作出可能在一個階段來完成,而不是進入所有類

Public MustInherit Class MyService 

    Public ReadOnly Property CurrentDataContext As StoreDataContext 
     Get 
      Return New StoreDataContext 
     End Get 
    End Property 

End Class 

我的客戶的任何變化類看起來像

Public Class CustomerSer 
Inherits MyService 
Implements ICustomer 

Public Function GetCustomers As Iqueryable(of Customer) 
Return From c in CurrentDataContext.Customers select c 
End Function 

正如你可以告訴上面的函數正在使用CurrentDataContext這是從創建的類繼承。

問題:

  1. 這是正確的還是會有在這個設計中的一些缺陷?
  2. 我是否需要在任何階段或在我的課程中關閉此服務?

感謝

回答

1

,因爲你要確保在提交更改時,您應該創建一個新的數據上下文中的每個時間。這遵循一個名爲Unit Of Work的軟件工程模式,在這裏你打開一個上下文,在實體樹上做一堆工作,然後點擊提交。用一種方法來完成這一切,以便將來任何人都能清楚地瞭解正在發生的事情。

如果您將創建移動到屬性中,則不太清楚提交更改會影響到什麼位置。你可以用一種方法打開它,另一種做一些改變,三分之一做提交改變,然後再做一些更改,然後不提交,這將很難檢測到。

我知道,這看起來像樣板,不是幹(不要重複自己),但仍然是良好的編程習慣。

下面是關於使用提交更改Scott Guthrie的更詳細的說明。

+0

謝謝,我將看看現在發佈的鏈接。就這樣,我正確地理解了你,你是說我有什麼是好的,並繼續提出什麼建議,或者你說我設計的設計是好的,但我需要額外的鍋爐板插入等我創建的類?非常感謝 – Computer

+1

繼續您的工作,在每個函數的開始處Dim一個新的DataStoreContext。當你正在進行讀取(選擇)時,這不是一個問題,但是當你進入更新對象時,你需要一個很好的過程:新的上下文,更新對象,提交所有的改變。 –

+0

對不起,還有另一個想法。我的屬性創建一個新實例 - 這不就是說,每次我調用該方法時,它會爲每個方法創建一個新實例?因此每次都有一個新的環境?謝謝 – Computer

相關問題