簡體   English   中英

在EF 6的同一數據庫中使用多個dbcontexts

[英]using multiple dbcontexts in the same database with EF 6

我已經看到了這個問題的一般領域中的一些答案,但沒有一個直接得到我所看到的。 我繼承了最近的代碼庫,其中包含了一個使代碼運行得更快的代碼庫。 在我看來,數據庫中的每個表(一個數據庫)都有自己的dbcontext。 這些表是高度相關的,我不斷看到的主要問題是需要根據表之間的外鍵關系做出決策。 使用這種設計方法,每次涉及兩個表時,開發人員使用每個上下文的語句嵌套(對他來說是好的自動清理,右邊),從表A中獲取數據,然后逐行循環遍歷表B以查找匹配項(通常我們對非匹配感興趣,以便我們可以更新表B),然后繼續。 我當然看到應用程序中使用了多個上下文,但我從未見過這種“模式”,也無法弄清楚為什么會使用它。 在我重寫應用程序的這一部分以便每個表位於相同的上下文之前,我覺得我應該做一個理智/現實檢查,以確保沒有一些非常糟糕的怪物在等我。 顯然,我找不到任何東西。 這是一個偽代碼段(具有表名和列名更改的確切代碼):

 var beers = from b in beerContext.AllBeersOffered
    where b.CurrentStock = 1
    select b;
    foreach(var beer in beers)
    {
        Bars bars = barContext.AllBeersCarried.FirstOrDefault(x=>x.BeerId==beer.Id)
        if(bars == null)
        { 
            //Create a List of beers offered but not carried in that bar, 
            // which is then added to another table.
        }
    }

再一次,我傾向於非常喜歡Whiskey-Tango-Foxtrot,將表格移動到一個DbContext並在一個插入中處理它,但這需要假設更深層次的真正,非常糟糕的編碼而不是我很舒服。 顯然,原來的程序員早已離開了公司,我們完全認為這個職業。 但是,他顯然是一個非常有經驗的開發人員(雖然是Java),所以我不喜歡假設無能為力,因為它可能是我所缺少的。 我的問題是,你能證明這個設計的合理性,如果是的話,我應該尋找什么?

這是一個反模式,大時代!

我見過初學者這樣做,尤其是 來自DAO背景時,每個實體都有自己的數據訪問鏡像。

它完全違背了像Entity Framework這樣的成熟OR映射器的目的,它旨在跨越關系模型和對象模型之間的鴻溝。 這樣的OR映射器是專門設計來映射以表格形式協會(孩子是指父母)在面向對象的形式協會(母公司持有的孩子)。

所以,是的,繼續將相關實體抓取到表示應用程序中的自然聚合的上下文中。

我建議你制作粗粒度的DbContexts ,但不要將整個架構移動到一個DbContext

您可以遵循DDD實踐,其中一個重要的表作為根,然后它與一些強烈依賴它的相關表一起使用。 該結構稱為聚合。 在我的設計中,我通常會DbContext每個聚合制作一個DbContext

另一方面,應該在需要時重新定義操作,以便每個操作僅處理一個聚合。 它可以從其他聚合中選擇ID,進行查詢以收集所需的所有數據,然后僅對一個聚合進行更改。 這種設計方法可以大大簡化代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM