2008-10-24 187 views
11

我在想如何組織DataContexts的最佳策略。我們工作的典型DB有50到100個表格,通常以第三範式形式存在,並且它們之間有許多關係。我認爲我們有兩種選擇:LINQ to SQL多個DataContext-s

  1. 將所有表放在一個上下文中。這將確保我們所做的任何事情都將以正確的順序在數據庫中提交。問題在於,LINQ設計人員會對50多張表格造成混亂,我擔心性能可能會受到影響。
  2. 根據表的邏輯分組創建多個數據上下文。問題在於,會有一些關係的一方在一個環境中,另一方在另一個環境中。我們必須手動處理以正確的順序提交兩個上下文。

有沒有建議的做法來解決這個問題?

更多細節:

我想在LINQ的頂部到SQL創建自己的實體和工作單位。實體將在一個xml模型文件中定義,其中也將指定到LINQ實體的映射。自定義工具將根據模型生成我的實體(POCO)。客戶代碼只與我的實體和我的工作單元互動;從來沒有直接使用DataContext或LINQ實體。但是我不想重複LINQ to SQL提供的所有功能,所以我想使用底層的LINQ DataContext。這意味着我不能在不同的數據上下文中執行兩個訂單,因爲無法將我的POCO訂單與兩個訂單進行映射。

回答

0

您應創建允許您執行工作單位的上下文。這可能涉及重疊的表映射。

CONTEXT1:客戶有許多發票

上下文2:客戶有很多訂單

上下文3:發票有很多訂單

+0

雖然這樣,但是Context2中的訂單無法在Context3中使用....您將以兩個不同的訂單實體結束 – Albert 2008-10-24 14:32:11

+0

如果工作分離爲單位,您絕不會嘗試使用對象來自context3中的context2。 – 2008-10-24 14:32:41

2

LINQ到SQL的映射像類型數據集,因爲當你使用一,你正在處理包含數據的會話。您可以在幾個不同的DataContext中擁有相同的表。畢竟他們只是階級;在開始與數據庫交互之前,它們並不意味着什麼,通過填充現有數據或使用它們來創建新數據。

因此,當您發送新目錄時,您可能擁有客戶,地址,電話等表格。然後,您將創建訂單時使用的發票,訂單項,產品等表格。但是在後一組中,您可能也希望擁有客戶。沒關係。您應該小心一次只有一個會話處於活動狀態,以便您不使用不一致的數據。只要你沒有以重疊的方式使用它們,你不應該在各種DataContext中重疊實體

至於混亂,你可以把你的DataContext放在一個特定的命名空間,你也可以把你的各種實體放在一個特定的命名空間(儘管每個實體在DataContext中只有一個命名空間)。您可以在「屬性」窗口中執行此操作。這會讓你保持Intellisense的混亂。

0

我對每個數據庫使用一個datacontext。

平均表可以達到100,但從經驗我沒有遇到任何性能問題。

datacontext位於編譯的單獨項目中。從BLL