Установите уровень изоляции по умолчанию для Microsoft.Practices.EnterpriseLibrary.

У меня есть веб-сайт .net 3.5, который вызывает тысячи различных хранимых процедур с использованием Microsoft.Practices.EnterpriseLibrary.

У нас было много тайм-аутов, и после некоторых игр и тестирования использование (nolock) в конце объединения таблиц в хранимых процессах работает очень хорошо и сокращает тайм-ауты.

Теперь я хочу сделать это для всех sps. Я мог бы добавить (nolock) ко всем именам таблиц, однако лучше установить уровень изоляции, используя в SQL «SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED»

Я не хочу добавлять это в начало всех sp (поскольку их так много), поэтому искал способ добавить его в соединение.

Пример кода для вызова sp выглядит следующим образом

public static int ExecuteNonQuery(string sStoredProcedureName, params object[] parameterValues)
{
    Data.Database db = Data.DatabaseFactory.CreateDatabase();
    using (DbCommand command = db.GetStoredProcCommand(sStoredProcedureName, parameterValues))
    {
        return db.ExecuteNonQuery(command);
    }
}

Я думаю, что этот параметр является параметром конфигурации в web.config, но не могу понять, что это такое, или я на правильном пути.

Любая помощь очень ценится.

Ура Амджид


person Amjid Qureshi    schedule 30.09.2009    source источник
comment
любой образец полного кода с решением ??   -  person Kiquenet    schedule 20.07.2010


Ответы (1)


Я предполагаю, что вы используете SQL Server?

Попробуйте установить READ COMMITTED SNAPSHOT в базе данных.

Смотрите здесь для получения дополнительной информации:

http://www.codinghorror.com/blog/archives/001166.html

person Robert Harvey    schedule 30.09.2009
comment
Извините за задержку с ответом. Это сработало отлично. Он работает на всей плате, и нет необходимости в каких-либо изменениях кода, кроме удаления (noLock), который я уже поставил на ура. - person Amjid Qureshi; 01.10.2009