Вы не упомянули, какая база данных находилась за вашей службой OData, так что это может быть неактуально. В SQL Server вы можете привязать свои операторы SELECT WITH nolock
, чтобы запретить выбор блокировать таблицу. Наличие этого говорит мне, что SELECTS определенно являются кандидатами на проблемы с блокировкой.
К сожалению, в EF нет способа указать WITH nolock
в ваших запросах. Самое близкое, что я смог найти, - это обернуть ваше соединение в транзакцию и установить уровень изоляции для чтения некоммутированных (как указано в ответе на вопрос, который я связал в комментариях). *
Вот пример кода из ответа на связанный вопрос, чтобы показать, как вы это сделаете:
//declare the transaction options
var transactionOptions = new System.Transactions.TransactionOptions();
//set it to read uncommited
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
//create the transaction scope, passing our options in
using (var transactionScope = new System.Transactions.TransactionScope(System.Transactions.TransactionScopeOption.Required, transactionOptions))
{
//declare our context
using (var context = new MyEntityConnection())
{
//any reads we do here will also read uncomitted data
//...
//...
}
//don't forget to complete the transaction scope
transactionScope.Complete();
}