Задание CommandTimeOut
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 03.02.10 10:09
Оценка:
Данные из БД достаются через

public abstract class PersonAccessor : DataAccessor<Person, PersonAccessor>
    {
         [SqlQuery(@"
               SELECT 
                   p.PersonId,
                   p.FirstName,
                   p.SecondName,
                   p.MiddleName,
                   p.Gender
               FROM Person p
               WHERE p.PersonId = @PersonId")]
        public abstract Person GetPerson(int personId);
    }

как в этом случае правильно задать значение для Command.CommandTimeout для PersonAccessor или глобально для всех DataAccessor-ов?
Re: Задание CommandTimeOut
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.02.10 10:29
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

OE>как в этом случае правильно задать значение для Command.CommandTimeout для PersonAccessor или глобально для всех DataAccessor-ов?


Свой наследник от DbManager, там вроде подходящий виртуальный метод был.
... << RSDN@Home 1.2.0 alpha 4 rev. 1424 on Windows 7 6.1.7600.0>>
AVK Blog
Re[2]: Задание CommandTimeOut
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 03.02.10 10:35
Оценка:
Здравствуйте, AndrewVK, Вы писали:

OE>>как в этом случае правильно задать значение для Command.CommandTimeout для PersonAccessor или глобально для всех DataAccessor-ов?

AVK>Свой наследник от DbManager, там вроде подходящий виртуальный метод был.

а в каком месте потом этого наследника использовать?
Re: Задание CommandTimeOut
От: Clerk  
Дата: 03.02.10 10:41
Оценка: 18 (1)
Здравствуйте, Odi$$ey, Вы писали:

Перекрыть в
DataProvider
метод
CreateCommandObject
... << RSDN@Home 1.2.0 alpha 4 rev. 1424>>
Re[3]: Задание CommandTimeOut
От: emanov Россия http://alexeiemanov.moikgrug.ru
Дата: 03.02.10 11:17
Оценка:
А так разве нельзя?
public abstract class Database : DataAccessor
{
public override DbManager GetDbManager()
{
var db = new DbManager("MyDb");
db.InitCommand += DbInitCommand;
return db;
}

private static void DbInitCommand(object sender, InitCommandEventArgs ea)
{
if (ea.Command != null)
ea.Command.CommandTimeout = ParamsAccessor.RegisterOperationTimeout;
}
Задание CommandTimeout
От: ili Россия  
Дата: 03.02.10 12:45
Оценка: 36 (1) +1
#Имя: FAQ.blt.CommandTimeout
Здравствуйте, Odi$$ey, Вы писали:

как вариант в копилку:

        public static ReportsAccessor CreateInstance()
        {
            DbManager db = new DbManager();
            db.InitCommand += new InitCommandEventHandler(db_InitCommand);
            return DataAccessor.CreateInstance<ReportsAccessor>(db, true);
        }

        static void db_InitCommand(object sender, InitCommandEventArgs ea)
        {
            ea.Command.CommandTimeout = 0;
        }
Re[2]: Задание CommandTimeOut
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 03.02.10 16:00
Оценка:
Здравствуйте, Clerk, Вы писали:

C>Перекрыть в
DataProvider
метод
CreateCommandObject


Не лучший, имхо, вариант. DataProvider все же не для этого.
... << RSDN@Home 1.2.0 alpha 4 rev. 1424 on Windows 7 6.1.7600.0>>
AVK Blog
Re: Задание CommandTimeout
От: cadet354 Россия
Дата: 04.02.10 06:56
Оценка:
Здравствуйте, ili, Вы писали:

не лучше ли это сделать (задание таймаута) в в виде атрибута, на метод\весь класс?
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
Re[2]: Задание CommandTimeout
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 04.02.10 10:54
Оценка: +1
Здравствуйте, cadet354, Вы писали:

C>не лучше ли это сделать (задание таймаута) в в виде атрибута, на метод\весь класс?


Не лучше. В атрибут можно передать только константу, а прошивать константный таймаут в код программы — несколько странное решение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1424 on Windows 7 6.1.7600.0>>
AVK Blog
Re[3]: Задание CommandTimeout
От: cadet354 Россия
Дата: 05.02.10 07:05
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Здравствуйте, cadet354, Вы писали:


C>>не лучше ли это сделать (задание таймаута) в в виде атрибута, на метод\весь класс?


AVK>Не лучше. В атрибут можно передать только константу, а прошивать константный таймаут в код программы — несколько странное решение.

а сейчас "прошито" 30 секунд, и для 90% запросов это работает, если я знаю, что этот запрос очень долгий(тот же не к ночи упомянутый репортинг), то я просто забил бы например 5 минут и это решило бы еще оставшиеся 9% процентов, для оставшегося 1% можно воспользоваться и в ручную указанием таймаута в DbManager.
... << RSDN@Home 1.2.0 alpha 4 rev. 1270>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.