如何在Entity Framework 6 DbContext.Database.BeginTransaction中配置事务超时?

时间:2013-10-15 23:53:08

标签: entity-framework transactions

使用

之类的代码
using (var tran = Ctxt.Database.BeginTransaction()) {   

如何设置事务超时的值?

2 个答案:

答案 0 :(得分:5)

如果由于某种原因您需要自己管理交易,则使用TransactionScope会更容易。它有几个构造函数接受TimeSpan参数来设置超时。例如

using(var ts = new TransactionScope(TransactionScopeOption.Required,
                                    TimeSpan.FromMinutes(1)))
{
    using(var ctx = new MyContext())
    {
        // Do stuff.
    }
    ts.Complete(); // Try - catch to catch TimeoutException
}

我很好奇为什么你要设置事务超时,而不是命令超时。

答案 1 :(得分:2)

我的建议是使用Database.CommandTimeout

var timeout = 60; //or whatever value you need
Ctxt.Database.CommandTimeout = timeout;
using (var tran = Ctxt.Database.BeginTransaction())
{
    //do stuff
}
//this line can be skipped if you're about to dispose context
Ctxt.Database.CommandTimeout = null; //setting back default timeout

当然,你可以很好地将它包装在某个类中。