Как использовать SqlAzureExecutionStrategy и «Nolock»
Чтобы справиться с таймаутами SQL, я пытаюсь использовать SqlAzureExecutionStrategy (https://msdn.microsoft.com/en-us/data/dn456835.aspx)
Проблема, с которой я сталкиваюсь, заключается в том, что она предотвращает «инициируемые пользователем транзакции», которые, как представляется, являются рекомендуемым способом реализации «with (nolock)» в EF (http://www.hanselman.com/blog/GettingLINQToSQLAndLINQToEntitiesToUseNOLOCK.aspx, NOLOCK с Linq to SQL).
пример кода
public AspnetUser GetAspnetUserByUserName(string userName)
{
using (var tx = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions() { IsolationLevel = IsolationLevel.ReadUncommitted }))
{
return context.AspnetUsers.Where(x => x.UserName == userName).FirstOrDefault();
}
}
выдает ошибку
Настроенная стратегия выполнения 'SqlAzureExecutionStrategy' не поддерживает инициированные пользователем транзакции. Увидетьhttp://go.microsoft.com/fwlink/?LinkId=309381 для дополнительной информации.
Я видел ответы, в которых говорится, что нужно отключить SqlAzureExecutionStrategy для каждого вызова, но это лишило бы смысла его использование, если бы все мои чтения игнорировали стратегию. Возможно иметь как "NoLock", так и SqlAzureExecutionStrategy.