繁体   English   中英

保护事务实体框架“_dataContext.Database.BeginTransaction()”时出错

[英]Error securing a transaction Entity Framework "_dataContext.Database.BeginTransaction()"

我正在尝试通过实体框架保护事务。 当我使用BeginTransaction ,ASP.NET 抛出异常:

配置的执行策略“SqlServerRetryingExecutionStrategy”不支持用户发起的事务。 使用'DbContext.Database.CreateExecutionStrategy()'返回的执行策略,将事务中的所有操作作为一个可重试单元来执行。

这是我在存储库中的代码

public async Task<EvaluationFormQuestionAnswer> AddScore(EvaluationFormQuestionAnswer evaluationFormQuestionAnswer)
{
    evaluationFormQuestionAnswer.Id = Guid.NewGuid();
    evaluationFormQuestionAnswer.EvaluatorId = _identityService.Identity.CurrentAccount.Id;

    using (var transaction = _dataContext.Database.BeginTransaction())
    {
        try
        {
            var result = await _dataContext.EvaluationFormQuestionAnswer.AddAsync(evaluationFormQuestionAnswer);
            await _dataContext.SaveChangesAsync();
            transaction.Commit();
            return result.Entity;
        }
        catch (Exception ex)
        {
            transaction.Rollback();
            throw new ArgumentException("Error", ex);
        }
    }
}

这应该有效:

var strategy = _dataContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () =>
        {
            ...<Your Using Block>...
        });

如上所示将其包装在执行策略中,您的代码应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM