2015-02-13 6 views
1

У меня возникла странная проблема при чтении данных с использованием инфраструктуры ADO.Net Entity.ADO.Net Entity Framework Thread Прекратить исключение при чтении данных

У меня есть две таблицы: «Обзоры» и «Пациенты». «VisitId» является основным ключом в «PatientVists», который является внешним ключом в таблице «опросы».

Я использую следующий запрос:

foreach (var survey in db.Surveys.Include(p => p.PatientVisit).Where(p => p.FacilityId == f.Id && p.IsCompleted == true && p.IsImaged == false).OrderBy(p => p.PatientVisit.MrnId).ThenBy(p => p.DateUpdated).ToList()) 

{ 
// reminign code 
} 

Этот запрос кажется вполне нормальным. Но при выполнении запроса я получаю исключение прерывания потока. Я могу понять, если я получаю исключение тайм-аута из-за большого объема данных. Но я не уверен, почему я получаю исключение прерывания потока. Я явно не создаю нить. этот фрагмент кода находится в веб-службе, но я считаю, что это не связано с этим.

Ниже трассировки стека:

System.Threading.ThreadAbortException: Thread was being aborted. 
    at SNIReadSyncOverAsync(SNI_ConnWrapper* , SNI_Packet** , Int32) 
    at SNINativeMethodWrapper.SNIReadSyncOverAsync(SafeHandle pConn, IntPtr& packet, Int32 timeout) 
    at System.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() 
    at System.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() 
    at System.Data.SqlClient.TdsParserStateObject.TryPrepareBuffer() 
    at System.Data.SqlClient.TdsParserStateObject.TryReadByte(Byte& value) 
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) 
    at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData() 
    at System.Data.SqlClient.SqlDataReader.get_MetaData() 
    at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) 
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) 
    at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior) 
    at System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand, CommandBehavior behavior) 
    at System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute[TResultType](ObjectContext context, ObjectParameterCollection parameterValues) 
    at System.Data.Objects.ObjectQuery`1.GetResults(Nullable`1 forMergeOption) 
    at System.Data.Objects.ObjectQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() 
    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 

ли переизбрали «ToList» оператора или же «включать» оператор порождает нить? Должен ли я заменить его на Join? в общем, что является предпочтительным методом с точки зрения эффективности?

Пожалуйста, дайте мне знать, если кто-нибудь имеет представление конкретного исключения

Благодарности

ответ

3

Я думаю, что это базовый поток, который обслуживает веб-приложение/сервис, который в настоящее время истекло. Если вы создаете процесс в своем потоке, он должен решить проблему.

Вы можете также попробовать обходной путь размещена здесь: https://sharepoint.stackexchange.com/questions/9380/thread-was-being-aborted-with-sharepoint-2010

Добавьте код в Web.Config:

<system.web> 
< httpRuntime executionTimeout="36000" /> 
</system.web > 

Он работал для меня, как временное решение, пока я не изменить код для запуска в своей собственной нити!