entity-framework - ADO.Net Entity Framework 线程在读取数据时中止异常

标签 entity-framework thread-abort

我在使用 ADO.Net Entity 框架读取数据时遇到了一个奇怪的问题。

我有两个表,“Surveys”和“PatientVists”。 “VisitId”是“PatientVists”中的主键,它是“surveys”表中的外键。

我正在使用以下查询:

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)

它是rebelected“polist”运算符或“包括”运算符产生一个线程?我应该用Join代替它吗?一般来说,从性能角度来看,哪种方法是首选方法?

请让我知道是否有人对特定的异常(exception)情况有所了解

谢谢

最佳答案

我认为这是为正在超时的 Web 应用程序/服务提供服务的基本线程。如果您在自己的线程上生成进程,它应该可以解决问题。

您还可以尝试此处发布的解决方法:
https://sharepoint.stackexchange.com/questions/9380/thread-was-being-aborted-with-sharepoint-2010

将以下代码添加到 Web.Config:

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

在我更改代码以在其自己的线程中运行之前,它作为临时解决方案对我有用!

关于entity-framework - ADO.Net Entity Framework 线程在读取数据时中止异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28503325/

相关文章:

c# - Entity Framework 和指南

ios - 应用程序在启动屏幕上崩溃(在 iPad 10.2 上)

c# - Thread.Abort() 与 Application.Exitthread()

c# - 如何将包含与 Guid 一起使用?

c# - 错误 : Connection Entity Framework with MySQL C#

c# - 我可以为每个数据上下文而不是每个查询定义预加载吗?

entity-framework - WebAPI 中的 Entity Framework : slow first hit

java - 如何在不终止执行该操作的线程的情况下取消文件上传/下载操作?

c# - 在 c# 中使用它的 ID 杀死/中止特定线程