我假設你問的是設計還是運行時模式。我一般會說否:
儘管可能將數據庫分割成多個數據上下文,但如果並且僅當兩個上下文之間沒有重疊時,這纔是可取的。
重疊是爲
例如你有一個WebsiteContext
和一個AdminContext
。 WebsiteContext
用於顯示Product
並履行Order
s。 A WebsiteUser
附加到Order
。 AdminContext
用於您的Staff
會員處理退款Orders
,其中也參考WebsiteUser
。 AdminContext
還需要重置密碼並更新WebsiteUser
的其他詳細信息。
你想這樣做的,因爲你不想要的網站來處理,甚至不知道有關Returns
WebsiteContext
Product -- Order -- WebsiteUser
AdminContext
Staff -- Returns -- Order -- WebsiteUser
在上面,我們可以看到我們在不同的數據複製許多對象上下文。這聽起來很糟糕,它確實表明人爲地將數據庫分成不同的數據上下文是一個錯誤的決定。你有沒有> 2個數據庫,或只有一個?這種重複違反了DRY原則(不要重複自己),因爲WebsiteContext.WebsiteUser與AdminContext.WebsiteUser不同,很可能代碼在需要關心他們引用哪個的時候會變得混亂。
LINQ的數據上下文只是一個OR映射器,並且需要被當作一個奇特的黑盒子,使得寫一些數據訪問代碼更容易。一些linq演示使它看起來像不再需要其他層,但任何複雜程序仍然受益於分層設計。
將Linq對象視爲僅用於輕鬆傳輸數據的對象,並創建一個將其隱藏爲實現細節的Domain層即可。閱讀DDD - 領域驅動設計。
就其本身而言,僅使用UI中的Linq對象最類似於Transaction Script
模式。在這種情況下,您仍然可以從具有處理細節的邏輯層中受益。
雖然您可能不希望上下文的責任如此寬泛,但數據上下文只是數據庫的表示。這不是一種安全機制,它不能阻止你破壞數據。
http://stackoverflow.com/questions/226127/multiple-single-instance-of-linq-to -sql-datacontext – spender 2009-02-18 02:27:28