2010-02-23 83 views
29

我正在使用ASP.NET 3.5的Web應用程序工作。該應用程序有數百個表。有人在研討會上告訴我,我應該爲整個應用程序使用一個.DBML文件,而不是使用多個.DBML文件(在stackoverflow中也有一篇文章說同樣的事情)。鑑於我有這麼多的表使用一個.DBML文件是否合理,或者我最好創建多個邏輯分組的.DBML文件?Linq to Sql - 多個.DBML文件或一個.DBML文件

舉例來說,我在想創建以下文件的.dbml的:

  • 客戶
  • 供應商
  • 員工
  • 銷售訂單

其中一個擔心我有關於使用多個.DBML文件是如何處理.DBML文件中的更新。例如,如果在輸入新的銷售訂單時必須更新客戶表上的一個字段。我將如何處理?我當然不希望在Customer和Sales Order .DBML文件中包含客戶表。我可以將操作包裝在TransactionScope中嗎?

我不知道以下是否對答案有任何影響,但我的計劃是使用存儲庫模式和POCO類,以便對.DBML文件中的表定義的引用對我的數據訪問是本地的層。

感謝

+0

+1很好的問題.. – jinsungy 2010-02-23 13:57:11

+0

+1。我同意...... – Steven 2010-02-23 14:32:42

回答

11

我會建議你使用ONE DBML文件所有的表。

如果您嘗試使用join two tables from different data contexts,它會使您的代碼變得更加複雜。它可以通過simulating cross context joins完成,但爲什麼把自己置於這種情況下。保持簡單愚蠢。另外,如果您決定使用2個或多個dbml文件,並且您錯誤地將相同的表格添加到多個數據上下文中,那麼您將獲得"This member is defined more than once」 error

+0

我忘了考慮跨DBML文件連接的問題。我只希望在.DBML文件中有這麼多表格不會引起任何意外的悲傷。 謝謝 – mikener 2010-02-24 13:21:24

6

我曾參與過一個項目,團隊決定將這個域分成四個不同的DBML文件。這種喋喋不休的主要原因與LINQ to SQL設計者有關。設計師不是爲了與大領域一起使用而構建的。

這個項目中的這四個'子域'是合理分開的,但是有一些重疊,這一直都是我們的位置。有了這個經驗,我建議你每個域使用一個DBML文件。通常每個數據庫都有一個域,所以這意味着每個數據庫一個DBML文件。個人而言,我反對在生產代碼中使用TransactionScope(但我始終將它用於集成測試),但這是另一個討論。但是,當你決定去與多個DBML文件,並有你需要創建多個的DataContext類的使用情況,您可以在同一個事務中運行它們,如下所示:

using (var con = new SqlConnection("constr")) 
{ 
    con.Open(); 
    using (var tran = con.BeginTransaction()) 
    { 
     using (var context = new CustomerDataContext(con)) 
     { 
      // do some work with it 
      context.SubmitChanges(); 
     } 

     using (var context = new VendorDataContext(con)) 
     { 
      // do some work with it 
      context.SubmitChanges(); 
     } 
    } 
} 

這是模型我使用大部分時間,即使使用單個DataContext。但是,連接和事務的創建都被抽象出來,所以在交易所在的代碼中只有一個地方。

2

我有一個相當大的200個表左右的項目,它在一個數據上下文中工作正常;因爲所有的數據都是相互關聯的(設計在第二和第三範式之間),使用多個數據上下文將是一件痛苦的事情。

多個上下文問題在應用程序需要對拆分表進行查詢的區域中並不會很有趣;由於LINQ的工作方式和向下鑽取層次結構,您不得不確保某些表在不同的數據上下文中。至少從方便的角度來看,並不是說它不能做到。

HTH。

0

我會爲每個上下文使用一個DBML文件。根據上下文,我的意思是您的用戶需要在您的應用程序的特定窗口中完成操作。例如:

  1. 你有一個圖形用戶界面讓您管理您的客戶對象; 然後我會考慮有一個CustomerManagementDataContext,我將在其中添加相關的客戶管理任務以及所有依賴關係的表。

這樣,如果你明白我的意思,你可能每個窗口都有一個上下文。但這一切都取決於您的關係模型,這可能會更容易將所有表納入您的DBML文件,但是它確實會創建一個更復雜的上下文,並且不會指出與您的客戶管理相關的表或其他,取決於你建立的上下文。

事實上,爲了使用方便,只使用一個也不錯,但如果我可以提及它,這不是一個好的做法。

+0

這是什麼#1引用?你有鏈接嗎? – Justin 2011-12-09 18:15:26