9

使用类似的代码

using (var tran = Ctxt.Database.BeginTransaction()) {   

如何设置事务超时值?

4

2 回答 2

6

如果出于某种原因您需要自己管理事务,则使用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
}

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

于 2013-10-16T18:49:02.560 回答
3

我的建议是使用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

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

于 2016-02-05T08:47:11.943 回答