У меня есть простой запрос LINQ-to-EF, который по какой-то причине перестает работать, и я имею в виду, что как только он будет выполнен, управление выполнением никогда не будет возвращено в следующую строку. Я не могу понять, почему так может быть. если я запускаю тот же запрос в LinqPad, используя LINQ-to-SQL, он отлично работает. вот вопрос:Запрос никогда не возвращается
Models.Currency curr = _db.Currencies.SingleOrDefault(x => x.ISO == p.Items[i].CurrType);
_db
где моя сущность ссылка контейнер и p.Items[i].CurrType
содержит значение «USD»
, что может быть проблема? какую диагностику я мог бы использовать?
TIA - e!
p.s. Я бегу на Visual Studio 2013 с MVC5
* обновление I *
согласно ниже предложения, я добавил как в "Connection Timeout = 10" к моей строке соединения (в Web.config) и время ожидание команды (в * .Context.cs), как это:
public partial class Entities : DbContext
{
public Entities()
: base("name=Entities")
{
((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 10;
}
в запросе еще виснет (никогда таймаут, чтобы бросить исключение), и я был глупец в базе данных в то время как запрос был повешен , Я могу видеть, что SQL выдается внешний вид (более или менее), как:
select * from Currencies
, который должен вернуться сразу, так как есть только 100 маленьких записей в этой таблице. соединение, на которое выдается запрос, выполняет спящую и ожидающую команду, и в базе данных нет блокировки; spid в вопросе выполнил 0 cpu/io.
Что еще я должен смотреть?
Проверьте, не истекает ли таймаут при подключении. Это случилось со мной, проблема заключалась в строке соединения, и именно поэтому потребовалось некоторое время, чтобы вернуть элемент управления. Это было исключение после таймаута соединения. –
У вас есть тайм-аут, указанный в вашем контексте db? У меня возникнет соблазн взглянуть на SQL Profiler, чтобы убедиться, что ваш запрос делает это в базе данных и видит, дает ли он представление о том, почему он не возвращается (deadlock ??) –
«Модели.Currency curr = _db.Currencies.FirstOrDefault() "выполнить правильно? В моем случае у меня было много элементов в db, и запрос длился достаточно долго. постскриптумвы должны профилировать базу данных с помощью профилировщика и проверить, какой запрос отправляется на db. – zchpit