【发布时间】:2018-03-17 02:37:02
【问题描述】:
与使用 EF Core 管理事务相关的问题:
IDbContextTransaction.Rollback() 是否有机会返回异常,以便将其放在 try 块中?
即
try
{
//...
if(condition)
transaction.Commit();
else
throw methodReturn.Exception;
}
catch (Exception e)
{
try // Does this try make any sense?
{
transaction.Rollback();
}
catch
{
// Log
}
throw e;
}
PD:在这种特定情况下,无法将事务嵌入到using 语句中,因此在实际代码中需要手动调用.Rollback()。
【问题讨论】:
-
回滚当然会失败。例如,如果 SqlConnection 在回滚事务时中断,则会引发异常。更多信息:msdn.microsoft.com/en-us/library/zayx5s0h(v=vs.110).aspx
-
既然你在谈论一个接口,答案是:它取决于实际的实现。但总的来说:是的,它可能会引发异常,例如,当事务已提交或已回滚时,
SqlTransaction.Rollback()将引发InvalidOperationException(请参阅 MSDN 上的以下链接:msdn.microsoft.com/en-us/library/zayx5s0h(v=vs.110).aspx)
标签: c# entity-framework asp.net-core transactions entity-framework-core