c# - 使用 EF 6 在同一个数据库中使用多个 dbcontext

标签 c# design-patterns entity-framework-6

我看到了一些涉及这个问题的一般领域的答案,但没有一个能直接说明我所看到的。我继承了一个最近的代码库,其中包含一个使代码运行得更快的章程。在我看来,数据库(一个数据库)中的每个表都被赋予了自己的 dbcontext。这些表是高度相关的,我一直看到的主要问题是需要根据表之间的外键关系做出决策。使用这种设计方法,每次涉及两个表时,开发人员为每个上下文嵌套 using 语句(对他来说自动清理很好,对),从表 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 映射器特别旨在将表格形式的关联(子项指的是父项)映射到面向对象形式的关联(父项拥有子项)。

是的,继续将相关实体抓取到表示应用程序中自然聚合的上下文中。

关于c# - 使用 EF 6 在同一个数据库中使用多个 dbcontext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42301354/

相关文章:

entity-framework - 在 Entity Framework 6 C# 中获取特定迁移的 SQL 文件

c# - 在上下文中找不到类型,可能是映射问题

c# - Entity Framework - ConnectionProviderName 的更新数据库命令提示

c# - Asp.net 如何限制文本框按键事件中小数点前后的位数

javascript - 我应该使用哪种 jQuery 插件设计模式?

c++ - 依赖注入(inject)的要点是将依赖传递给目标函数(或构造函数)而不是在目标内部创建它们吗?

design-patterns - 将规则应用于事实的设计模式和算法

c# - 在自动完成文本框 C# 中按回车键后关闭下拉菜单

比较相同字符串时,C# IComparer 返回意外结果

c# - 从WCF应用程序传递回WPF应用程序的ReportServer的byte []反序列化上没有BinaryHeader错误