У меня есть общий вопрос и интерес к LINQ и тайм-аутам.
У меня есть работающее приложение, и я получаю тайм-ауты по следующему коду.
Следующий код, который является нормальным, и я не вижу ничего плохого:
приватный статический tblUser GetUserLinq (строка электронной почты, строка пароля)
{
DataContext db = new DataContext ();
var tblUsers = from user in db.tblUsers
where user.EmailAddress == email
&& user.Password == password
select user;
if (tblUsers.Count() == 0)
return null;
return tblUsers.First();
}
Но на следующие таймауты, довольно много, на:
if (tblUsers.Count() == 0)
Вот исключение
Истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает. - System.Data.SqlClient.SqlException: истекло время ожидания. Время ожидания истекло до завершения операции или сервер не отвечает.
в System.Data.SqlClient.SqlConnection.OnError (исключение SqlException, логическое breakConnection)
в System.Data.SqlClient.SqlInternalConnection.OnError (исключение SqlException, логическое breakConnection)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj)
в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
в System.Data.SqlClient.SqlDataReader.ConsumeMetaData ()
в System.Data.SqlClient.SqlDataReader.get_MetaData ()
в System.Data.SqlClient.SqlCommand.FinishExecuteReader (SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
в System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, логический асинхронный)
в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String, результат DbAsyncResult)
в System.Data.SqlClient.SqlCommand.RunExecuteReader (CommandBehavior cmdBehavior, RunBehavior runBehavior, логический returnStream, метод String)
в System.Data.SqlClient.SqlCommand.ExecuteReader (поведение CommandBehavior, метод String)
в System.Data.SqlClient.SqlCommand.ExecuteDbDataReader (поведение CommandBehavior)
в System.Data.Common.DbCommand.ExecuteReader ()
в System.Data.Linq.SqlClient.SqlProvider.Execute (запрос выражения, фабрика QueryInfo queryInfo, фабрика IObjectReaderFactory, Object [] parentArgs, Object [] userArgs, ICompiledSubQuery [] subQueries, Object lastResult)
в System.Data.Linq.SqlClient.SqlProvider.ExecuteAll (запрос выражений, QueryInfo [] queryInfos, фабрика IObjectReaderFactory, Object [] userArguments, ICompiledSubQuery [] subQueries)
в System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute (запрос выражения)
в System.Data.Linq.DataQuery 1.System.Linq.IQueryProvider.Execute[S](Expression expression)
at System.Linq.Queryable.Count[TSource](IQueryable
1 источник)
в Actions.GetUserLinq (Строковая электронная почта, Строковый пароль) в C: \ Actions.cs: строка 104
при входе в систему (строка электронной почты, пароль строки) в C: \ Actions.cs: строка 33
Некоторые мои мысли о том, почему истекает время ожидания:
Счетчик должен подсчитать количество записей в этой таблице, а это не то, что мы ищем
Если мы пытаемся выяснить, существует ли запись, следует ли использовать следующий код:
var tblUsers = (from user in db.tblUsers
where user.EmailAddress == email
&& user.Password == password
select user).FirstOrDefault(u => u.UserId <0) ;
В противном случае я немного запутался, почему LINQ истекает на счетчике
Еще одна вещь, которую я заметил, заключается в том, что если вы запускаете следующий SQL-код непосредственно на компьютере через SQL Enterprise Manager, он также истекает, что указывает на то, что это, возможно, проблема с блокировкой, однако единственное приложение, вызывающее эту таблицу, - LINQ
выберите количество (идентификатор пользователя) из tbluser
Комментарии приветствуются