gpt4 book ai didi

entity-framework - 使用 Entity Framework 从一个数据库故障转移到另一个数据库的一般模式?

转载 作者:行者123 更新时间:2023-12-04 16:09:47 24 4
gpt4 key购买 nike

我们有一个企业数据库,它通过世界各地的许多站点进行复制。我们希望我们的应用程序尝试连接到本地站点之一,如果该站点关闭,我们希望它回退到企业数据库。我们希望我们的每个数据库操作都有这种行为。

我们正在使用 Entity Framework 、C# 和 SQL Server。

起初我希望我可以在连接字符串中指定一个“故障转移伙伴”,但这仅适用于镜像数据库环境,但事实并非如此。我还研究了编写自定义 IDbExecutionStrategy。但是这些策略只允许您指定重试失败的数据库操作的模式。它不允许您以任何方式更改操作,例如将其定向到新连接。

那么,除了围绕我们许多数据库操作中的每一个重复重试逻辑之外,您是否知道处理此类操作的任何好的模式?

2014-05-14 更新:

我将针对已经提出的一些建议进行详细说明。

我有很多地方的代码看起来像这样:

try
{
using(var db = new MyDBContext(ConnectionString))
{
// Database operations here.
// var myList = db.MyTable.Select(...), etc.
}
}
catch(Exception ex)
{
// Log exception here, perhaps rethrow.
}

有人建议我有一个例程,首先检查每个连接字符串并返回第一个成功连接的字符串。这是合理的。但是我看到的一些错误是操作超时,连接工作但数据库存在问题,使其无法完成操作。

我正在寻找的是一种模式,我可以用来封装工作单元并说,“在第一个数据库上试试这个。如果由于任何原因失败,回滚并在第二个数据库上尝试。如果失败,试试它在第三个等等,直到操作成功或者你没有更多的数据库。”我很确定我可以自己推出(如果我这样做了,我会发布结果),但我希望可能有一种已知的方法来解决这个问题。

最佳答案

如何使用一些依赖注入(inject)系统,如 autofac 并在那里为新的上下文对象注册一个工厂 - 它将执行首先尝试连接到本地的逻辑,如果发生故障,它将连接到企业数据库。然后它将返回准备好的 DbContext 对象。该工厂将通过依赖注入(inject)系统提供给所有需要它的对象 - 他们将使用它来创建上下文并在不再需要它们时将其处理掉。

关于entity-framework - 使用 Entity Framework 从一个数据库故障转移到另一个数据库的一般模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23449484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com