Ame*_*mey 3 entity-framework thread-abort
使用ADO.Net Entity框架读取数据时,我遇到了一个奇怪的问题.
我有两张桌子,"Surveys"和"PatientVists"."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
}
Run Code Online (Sandbox Code Playgroud)
上面的查询似乎很正常.但是在执行查询时我得到线程中止异常.我可以理解,由于数据量很大,我是否会收到超时异常.但我不知道为什么我得到线程中止异常.我没有明确地产生一个线程.此代码段位于Web服务中,但我认为它与此无关.
以下是堆栈跟踪:
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)
Run Code Online (Sandbox Code Playgroud)
是重新选择"ToList"运算符还是"include"运算符产生一个线程?我要用Join替换它吗?一般来说,从性能角度来看哪个是首选方法?
如果有人了解特定的例外,请告诉我
谢谢
小智 5
我认为这是为正在超时的Web应用程序/服务提供服务的基本线程.如果您在自己的线程上生成进程,它应该解决问题.
您还可以尝试在此处发布的解决方法:https: //sharepoint.stackexchange.com/questions/9380/thread-was-being-aborted-with-sharepoint-2010
将以下代码添加到Web.Config:
< system.web >
< httpRuntime executionTimeout="36000" />
< / system.web >
Run Code Online (Sandbox Code Playgroud)
在我将代码更改为在自己的线程中运行之前,它对我来说是一个临时解决方案!
归档时间: |
|
查看次数: |
3495 次 |
最近记录: |