多個 DataContext 類是否合適?
為了在 ASP.net 3.5 應用程序中充分使用 LinqToSql,需要創建DataContext 類(通常使用 VS 2008 中的設計器完成)。從 UI 的角度來看,DataContext 是您希望通過 LinqToSql 公開的數據庫部分的設計,並且在設置 LinqToSql 的 ORM 功能時是不可或缺的。
我的問題是:我正在建立一個使用大型數據庫的項目,其中所有表都通過外鍵以某種方式互連。我的第一個傾向是創建一個巨大的 DataContext 類來模擬整個數據庫。這樣我理論上可以(儘管我不知道在實踐中是否需要)使用通過 LinqToSql 生成的外鍵連接來輕鬆地在我的程式碼中的相關對象之間移動、插入相關對像等。
然而,經過一番思考,我現在認為創建多個 DataContext 類可能更有意義,每個類都與我的數據庫中的特定命名空間或邏輯相關部分相關。我主要擔心的是,始終為與數據庫特定區域相關的單個操作實例化和處理一個巨大的 DataContext 類將對應用程序資源造成不必要的影響。此外,創建和管理較小的 DataContext 文件比創建一個大文件更容易。我會失去的事情是,數據庫的一些遙遠部分將無法通過 LinqToSql 導航(即使在實際數據庫中連接它們的關係鏈)。此外,還會有一些表類存在於多個 DataContext 中。
關於多個 DataContext(對應於 DB 命名空間)是否適合代替(或補充)一個非常大的 DataContext 類(對應於整個 DB)的任何想法或經驗?
我不同意約翰的回答。DataContext(或 Linq to Entities ObjectContext)更像是一個“工作單元”,而不是一個連接。它管理更改跟踪等。有關說明,請參閱此部落格文章:
這篇博文的四個要點是DataContext:
- 非常適合“工作單元”方法
- 也是為“無狀態”伺服器操作而設計的
- 不是為長期使用而設計的
Should be used very carefully after any SumbitChanges() operation.
考慮到這一點,我不認為使用多個 DataContext 會造成任何傷害——事實上,為不同類型的工作創建不同的 DataContext 將有助於使您的 LinqToSql 實現更有用和更有條理。唯一的缺點是你不能使用 sqlmetal 來自動生成你的 dmbl。