ibatis 1.6.2 для тайм-аута запроса .Net - PullRequest
1 голос
/ 20 октября 2011

Есть ли способ установить тайм-аут запроса для ibatis 1.6 на платформе .net?

К сожалению, в этом случае мне не подходит обновление.

Cheers Shane

1 Ответ

2 голосов
/ 28 октября 2011

Я сделал это, используя шаблон декоратора, который украшает IDbProvider для предоставления необходимого метода:

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
    }
}

И, наконец, при построении картографа:

        _mapper = builder.Configure(sqlMapConfig);
        LongQueries lq = new LongQueries();
        lq.setDbProvider(_mapper.DataSource.DbProvider);
        _mapper.DataSource.DbProvider = lq;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...