我在事务中有一组DB语句(插入,更新等),它们在for循环中执行,就像这样。
using (Transaction)
{
for (loop until x values)
{
Insert
Update
}
}
然后我complete() and dispose()
TransactionScope
。它适用于较少数量的' x。但是如果x非常大,则事务超时,因为它默认为10分钟(来自machine.config)
我的问题:当我们可以保证不会出现死锁时,是否可以增加该TransactionScope代码级别的超时?我使用以下代码覆盖默认值(从10分钟到4小时)。它工作正常,但它是否可取?
public static class TransHelper
{
public static void OverrideMaximumTimeout(TimeSpan timeout)
{
var type = typeof(TransactionManager);
var cachedMaxTimeout = type.GetField("_cachedMaxTimeout", BindingFlags.NonPublic | BindingFlags.Static);
cachedMaxTimeout.SetValue(null, true);
var maximumTimeout = type.GetField("_maximumTimeout", BindingFlags.NonPublic | BindingFlags.Static);
maximumTimeout.SetValue(null, timeout);
}
}
我打电话给,
TransHelper.OverrideMaximumTimeout(TimeSpan.FromHours(4));