gpt4 book ai didi

c# - 如何将 SqlAzure 重试逻辑添加到 OrmLite 操作?

转载 作者:行者123 更新时间:2023-11-30 17:51:39 25 4
gpt4 key购买 nike

我想让重试逻辑透明化,最好利用 Microsoft 的 Transient Fault Handling Application Block ,而不是将我的代码的每个数据库访问片段包装到一个重试的函数中。我能做的是创建自定义 IDbConnectionFactory生成 MySqlAzureConnection 类型的自定义 IDbConnection 对象:

MySqlAzureConnection dbConn = myConnFactory.OpenDbConnection();
dbConn.Insert(new Employee { ... });

我有两个选择:

  • MySqlAzureConnection添加一个.Insert()方法来隐藏OrmLite 的相同扩展方法,以提供我的重试逻辑。实际上我的 .Insert() 将包含完全相同的源代码与 OrmLite 一样:调用 dbConn.Exec(),但是 .Exec() 将是我的实现提供了重试逻辑。
    问题是(为了确保查询和写入在我的程序中总是使用重试逻辑)这样我就会结束通过复制和粘贴所有 120 多个方法[OrmLite][Read|Write]ConnectionExtensions 静态类,只是为了扩展非常单一的 dbConn.Exec() 的行为。听起来不太好。

  • 省略 using ServiceStack.OrmLite; 以确保非重试不会调用 OrmLite 的实现。在这种情况下我该如何使用OrmLite?我将不得不一直写完整的命名空间限定名称。听起来也很糟糕。

编辑:

我意识到还有第三种选择:放弃重试逻辑是“透明的”。换句话说,承认明确使用在使用 OrmLite 的每一段代码中都有一个包装函数,以及在该包装函数中实现重试逻辑。事实上,Transient Fault Handling Application Block做同样的事情:引入 ExecuteCommand(),一种新方法(IDbConnection 中的非标准)并让开发人员负责将其用作任何数据库访问代码的高级包装器。

虽然这个解决方案听起来比前两个好,但我仍然不满意。 Entity Framework (6.0) 已经设法使这种弹性透明,我期待着类似的解决方案在这里。 (很容易连接到 OrmLite 的ReadConnectionExtensions.Exec() 方法——如果它不是静态扩展方法。更好的是可注入(inject)模块,如done in the Entity Framework ).

最佳答案

对此做了一些进一步的研究,结果发现从 .Net 4.6.1 开始, transient 错误处理现在内置到 SqlConnection 中。因此,作为 Ormlite 的原始 Ado.net SqlConnection 基础,任何自定义方法都应该变得不必要。

关于c# - 如何将 SqlAzure 重试逻辑添加到 OrmLite 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19170272/

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