[英]Error securing a transaction Entity Framework "_dataContext.Database.BeginTransaction()"
I am trying to secure a transaction through Entity Framework.我正在尝试通过实体框架保护事务。 When I use BeginTransaction
, ASP.NET throws an exception:当我使用BeginTransaction
,ASP.NET 抛出异常:
The configured execution strategy 'SqlServerRetryingExecutionStrategy' does not support user initiated transactions.配置的执行策略“SqlServerRetryingExecutionStrategy”不支持用户发起的事务。 Use the execution strategy returned by 'DbContext.Database.CreateExecutionStrategy()' to execute all the operations in the transaction as a retriable unit.使用'DbContext.Database.CreateExecutionStrategy()'返回的执行策略,将事务中的所有操作作为一个可重试单元来执行。
This is my code inside the repository这是我在存储库中的代码
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);
}
}
}
This should work:这应该有效:
var strategy = _dataContext.Database.CreateExecutionStrategy();
await strategy.ExecuteAsync(async () =>
{
...<Your Using Block>...
});
Wrap it in the execution strategy as shown above and your code should work fine.如上所示将其包装在执行策略中,您的代码应该可以正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.