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

C# 保护事务实体框架时出错“_dataContext.Database.BeginTransaction();,c#,asp.net,sql-server,entity-framework,C#,Asp.net,Sql Server,Entity Framework,我试图通过实体框架来保护事务。当我使用BeginTransaction时,ASP.NET会引发异常: 配置的执行策略“SqlServerRetryingExecutionStrategy”不支持用户启动的事务。使用“DbContext.Database.CreateExecutionStrategy()”返回的执行策略以可检索单元的形式执行事务中的所有操作 这是我在存储库中的代码 public async Task<EvaluationFormQuestionAnswer> AddS

我试图通过实体框架来保护事务。当我使用
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);
        }
    }
}
公共异步任务AddScore(EvaluationFormQuestionAnswer EvaluationFormQuestionAnswer)
{
evaluationFormQuestionAnswer.Id=Guid.NewGuid();
evaluationFormQuestionAnswer.EvaluatorId=_identityService.Identity.CurrentAccount.Id;
使用(var事务=_dataContext.Database.BeginTransaction())
{
尝试
{
var result=wait_dataContext.EvaluationFormQuestionAnswer.AddAsync(EvaluationFormQuestionAnswer);
wait_dataContext.saveChangesSync();
Commit();
返回结果。实体;
}
捕获(例外情况除外)
{
transaction.Rollback();
抛出新的ArgumentException(“错误”,ex);
}
}
}

您是否尝试使用
CreateExecutionStrategy
而不是
BeginTransaction
?这就是错误消息似乎告诉您要做的事情。而且,您的错误处理不正确。ArgumentException应用于指定传递给方法的参数的问题。如果您不打算用更多的细节来增强捕获的异常,那么您可以只执行
throw
将重新显示捕获的异常并保留堆栈跟踪。我不记得实例化过类似的东西,我只是对上面的代码进行了此配置,如microsoft网站所示。我不知道你在说什么。请重新阅读我的评论。我不使用CreateExecutionStrategy。我尝试使用BeginTransaction,但我收到此响应您是否尝试使用
CreateExecutionStrategy
而不是
BeginTransaction
?这就是错误消息似乎告诉您要做的事情。而且,您的错误处理不正确。ArgumentException应用于指定传递给方法的参数的问题。如果您不打算用更多的细节来增强捕获的异常,那么您可以只执行
throw
将重新显示捕获的异常并保留堆栈跟踪。我不记得实例化过类似的东西,我只是对上面的代码进行了此配置,如microsoft网站所示。我不知道你在说什么。请重新阅读我的评论。我不使用CreateExecutionStrategy。我尝试使用BeginTransaction,但收到了此响应