我正在foreach循环中向数据库添加一个条目并使用事务。但我收到此错误:
The connection is already in a transaction and cannot participate in another transaction.
UPDATE:
var user = await CurrentUser;
if (user.IsNotNull())
{
using (var transaction = _context.Database.BeginTransaction())
{
try
{
var reports = new List<ReportEntity>();
foreach (var model in modelList)
{
reports.Add(new ReportEntity
{
Id = Guid.NewGuid(),
UserId = user.Id,,
ReportTypeId = ReportTypeId
});
}
await _context.tbl_Reports.AddRangeAsync(reports);
await _context.SaveChangesAsync();
await transaction.CommitAsync();
resp.Status = true;
}
catch (Exception e)
{
resp.ErrorMessage = e.Message;
await transaction.RollbackAsync();
}
} //End of transaction
}
}
else
{
resp.ErrorMessage = "User not found";
}
我将根据POST中的对象数组在循环中添加记录。我什么时候提交事务,所以不会出现此错误?
user
为null的情况下,您似乎并没有关闭交易。这实际上是您的代码中发生的事情:
_context.Database.BeginTransaction()
的方法user
为空,这导致不调用CommitAsync
或RollbackAsync
user
不为空)]我想它应该以这种方式工作。您可以尝试提交/回滚事务,即使数据库中的任何内容都没有更改,也应该可以解决此问题。
SqlConnection.BeginTransaction上的文档说:
您必须使用Commit或Rollback方法显式提交或回滚事务。