我已经看到了这个问题的一般面积得到一些答案,但没有直接获得在我所看到的。我使用章程继承了最近的代码库,以使代码运行得更快。它看起来像数据库中的每个表(一个数据库)都有自己的dbcontext。这些表格是高度相关的,我所看到的主要问题是需要根据表之间的外键关系做出决定。通过这种设计方法,每次涉及两个表时,开发人员为每个上下文嵌套使用语句(正确的自动清理),从表A抓取数据,然后逐行循环遍历表B以查找匹配(通常我们对非匹配感兴趣,以便我们可以更新表B),然后继续。我当然看到了应用程序中使用了多个上下文,但我从来没有见过这种“模式”,并且无法弄清楚为什么会使用它。在我重写应用程序的这部分内容以使每个表格都处于相同的背景下之前,我觉得我应该做一个理智/现实检查,以确保没有一些非常糟糕的怪物在等着我。显然,我找不到任何东西。下面是一个伪代码段(与表和列名称的变化确切的代码):使用多个dbcontexts在同一个数据库与EF 6
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.
}
}
同样,我的倾向是非常威士忌,探戈,狐步舞,将表一的DbContext和一个刀片处理这个问题,但需要假设更深层次的真正非常糟糕的编码,而不是我自己做的。显然,原来的程序员早已不在业务之列,我们完全认为这个职业。但是,他显然是一个非常有经验的开发人员(不过,Java),所以我不喜欢在我可能缺少某些东西的时候认为无能。我的问题是,你能否证明这个设计是正确的?如果是这样,我应该寻找什么?
一个问题是,所有的交易将得到提升,即使在连接字符串是相同的分布式事务协调器。与本地Sql Server交易相比,这会损害您的表现 – Fran