2011-10-20 13 views
1

.netプラットフォームでibatis 1.6のクエリタイムアウトを設定する方法はありますか?ibatis 1.6.2 for .Netクエリタイムアウト

残念ながら、アップグレードはこの場合私にとってはオプションではありません。

public abstract class LongQueriesDecorator : IDbProvider 
{ 
    protected IDbProvider _iDbProvider; 

    public void setDbProvider(IDbProvider iDbProvider) 
    { 
     this._iDbProvider = iDbProvider; 
    } 


    public abstract void setCommandTimeout(IDbCommand cmd); 

    // implement all IDbProvider methods calling _iDbProvider.METHOD 
    // ... 
    // except for 

    public IDbCommand CreateCommand() 
    { 
     if (_iDbProvider != null) 
     { 
      IDbCommand cmd = _iDbProvider.CreateCommand(); 
      // here you can call the delegate 
      setCommandTimeout(cmd); 
      return cmd; 
     } 
     else 
     { 
      return null; 
     } 
    } 
    // ... 
} 

そして、抽象クラスを実現:

public class LongQueries : LongQueriesDecorator 
{ 
    public override void setCommandTimeout(IDbCommand cmd) 
    { 
     cmd.CommandTimeout = 1000; // here you can configure a value in the App.config 
    } 
} 

私は必要なメソッドを公開するIDbProviderを飾るDecoratorパターンを使用して、これをやった

乾杯 シェーン

答えて

2

最後に、マッパーを作成するとき:

 _mapper = builder.Configure(sqlMapConfig); 
     LongQueries lq = new LongQueries(); 
     lq.setDbProvider(_mapper.DataSource.DbProvider); 
     _mapper.DataSource.DbProvider = lq; 
+0

ありがとう、私はこれを調べます。私の場合、私のibatisは別のサードパーティーのapiにラップされているので、私はこのようなカスタムコードをプラグインすることができないかもしれません。乾杯、シェーン – Shane