我遇到了相同的错误,看到多个线程,在谷歌搜索了2天后,我似乎无法解决该问题,而且我也看不出为什么。我简化了一些与sqltransaction部分无关的代码。
@OneToOne(fetch = FetchType.LAZY,cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumn(name = "REFRESH_TOKEN_ID")
private RefreshToken refreshToken;
答案 0 :(得分:0)
您忘记在 command.Transaction = sqlTran;
中的command.ExecuteNonQuery();
之前添加PerformTransaction()
。
public static void PerformTransaction(HttpRequestMessage req, string query, SqlConnection conn, TraceWriter log, SqlTransaction sqlTran, SqlCommand command)
{
try
{
command.Transaction = sqlTran;
command.ExecuteNonQuery();
log.Info("Query Executed Successfully");
}
catch
{
log.Info("Transaction Execution Error");
sqlTran.Rollback();
throw;
}
}
编辑:实际上,您的问题是,当sqlTran
的第一笔交易尚未完成时,您正在尝试对多个交易使用相同的sqlTran
。换句话说,您在调用command.ExecuteNonQuery()
在sqlTran.Commit()
中try
之后,尝试将Command.ExecuteNonQuery()
移动到PerformTransaction()
块内。这样,在尝试执行另一个事务之前,将提交当前事务。
public static void PerformTransaction(HttpRequestMessage req, string query, SqlConnection conn, TraceWriter log, SqlTransaction sqlTran, SqlCommand command)
{
try
{
command.ExecuteNonQuery();
log.Info("Query Executed Successfully");
sqlTran.Commit();
log.Info("Transaction Commited Successfully");
}
catch
{
log.Info("Transaction Execution Error");
sqlTran.Rollback();
throw;
}
}