gpt4 book ai didi

.net - 在没有 Azure 的情况下使用 Entity Framework 和 transient 故障处理 block

转载 作者:行者123 更新时间:2023-12-01 03:56:58 26 4
gpt4 key购买 nike

我有几个应用程序依赖于使用 EF 4 的存储库。 有时,SQL 操作会因为(即超时、连接失败等)而失败。

我想使用 transient 故障处理应用程序块,但我没有使用 Azure。 Azure 方案似乎有大量信息,但没有关于使用“准系统”方法的信息。我担心如果我使用 Azure 检测策略,它就行不通。

有谁知道我在哪里可以找到有关如何最好地使用它的信息?

最佳答案

我可以通过查看这里开始:
http://hmadrigal.wordpress.com/2012/04/23/automatic-retries-using-the-transient-fault-handling-from-enterprise-libraries-entlib/

您只需要编写自己的检测策略类。就我而言,它看起来像这样:

public class EntityFrameworkTransientErrorDetectionStrategy : ITransientErrorDetectionStrategy
{
#region ITransientErrorDetectionStrategy Members

public bool IsTransient(Exception ex)
{
if (ex is SqlException)
{
return true;
}
else
return false;
}

#endregion
}

在我的存储库构造函数中,我有这个:
_retryStrategy = new FixedInterval(_retryLimit, new TimeSpan(0, 0, 0, 0, 500));
_retryPolicy = new RetryPolicy<EntityFrameworkTransientErrorDetectionStrategy>(_retryStrategy); // use our custom detection strategy

_retryPolicy.Retrying += (sender, args) =>
{
// Log any retries as warnings
_logger.WarnFormat("Retry {0} of {1} due to exception: {2}", args.CurrentRetryCount, _retryLimit, args.LastException);
};

一个典型的存储库方法:
public override HarvesterDomain.Source SelectSource(Guid id)
{
HarvesterDomain.Source source = null;
_retryPolicy.ExecuteAction(() =>
{
var contextSource = _context.Sources.Where(s => s.Id == id).FirstOrDefault();

if (contextSource != null)
source = contextSource.ToHarvesterDomainSource();
});
return source;
}

关于.net - 在没有 Azure 的情况下使用 Entity Framework 和 transient 故障处理 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16468605/

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