asp.net – 实体框架“等待操作超时”就简单的DeleteAll

我们有一个我继承的MVC Web应用程序加载,让我们称之为MyCategory及其所有子项为webform,进行编辑,然后保存点击保存.应用程序的工作方式是首先删除模型中父级实体的所有数据,然后重新添加所有内容.我们的并发用户数非常低,每个露水时间最多不超过20人.我们无法在本地重现此错误,但当离岸团队开始工作时,我们已经开始看到了

[sqlException (0x80131904): Timeout expired. The timeout period
elapsed prior to completion of the operation or the server is not
responding. The statement has been terminated.]

出现错误.在父表上从LINQ调用删除时会发生这种情况(此时它没有数据,子表也没有).这是间歇性的,但在过去一周发生了很多次,其中该项目的这部分工作有所增加.

从Stack Trace看,它看起来在System.Data.sqlClient.sqlCommand.FinishExecuteReader失败了,这似乎是109分钟.这应该是从表中删除最多tqo记录,并且从该表加载数据的任何人应该在很短的时间内检索最多两个.

任何关于从哪里开始的想法将不胜感激.不幸的是,我没有权限在生产数据库上运行SQL查询分析器或活动监视器.

调用堆栈是:

[sqlException (0x80131904): Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
The statement has been terminated.]
   System.Data.sqlClient.sqlConnection.OnError(sqlException exception,Boolean breakConnection,Action`1 wrapCloseInAction) +388
   System.Data.sqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj,Boolean callerHasConnectionLock,Boolean asyncclose) +717
   System.Data.sqlClient.TdsParser.TryRun(RunBehavior runBehavior,sqlCommand cmdHandler,sqlDataReader dataStream,BulkcopySimpleResultSet bulkcopyHandler,TdsParserStateObject stateObj,Boolean& dataReady) +4515
   System.Data.sqlClient.sqlCommand.FinishExecuteReader(sqlDataReader ds,RunBehavior runBehavior,String resetoptionsstring) +6557561
   System.Data.sqlClient.sqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,Boolean returnStream,Boolean async,Int32 timeout,Task& task,Boolean asyncWrite,sqlDataReader ds) +6560327
   System.Data.sqlClient.sqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,String method,taskcompletionsource`1 completion,Boolean asyncWrite) +586
   System.Data.sqlClient.sqlCommand.InternalExecuteNonQuery(taskcompletionsource`1 completion,String methodName,Boolean sendToPipe,Boolean asyncWrite) +742
   System.Data.sqlClient.sqlCommand.ExecuteNonQuery() +287
   System.Data.Linq.sqlClient.sqlProvider.Execute(Expression query,QueryInfo queryInfo,IObjectReaderFactory factory,Object[] parentArgs,Object[] userArgs,ICompiledSubQuery[] subQueries,Object lastResult) +789
   System.Data.Linq.sqlClient.sqlProvider.Executeall(Expression query,QueryInfo[] queryInfos,Object[] userArguments,ICompiledSubQuery[] subQueries) +188
   System.Data.Linq.sqlClient.sqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +500
   System.Data.Linq.StandardChangeDirector.DynamicDelete(Trackedobject item) +71
   System.Data.Linq.StandardChangeDirector.Delete(Trackedobject item) +258
   System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) +622
   System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) +932
   WebAppData.MyCategory.MyCategoryData.Deleteall(Int32 id,Guid gid) +1053
   WebAppServices.MyCategory.MyCategoryService.DeleteMyCategoryParentItems(Int32 id,Guid gId) +1632
   WebAppServices.MyCategory.MyCategoryService.UpdateMyCategory(Int32 id,Guid gId,MyCategoryEntity mce) +51
   WebAppUI.Areas.Documents.Categories.Sections.MyCategory.MyCategoryController.Save(Int32 Id,MyCategoryModel model) +93

编辑:

连接字符串:

<add name="Data" connectionString="Data Source=myserver;Initial Catalog=mydatabase;User ID=myuser;Password=mypassword />

解决方法

这是您的问题的一个临时解决方案.您可以增加超时,如下所示.但是您必须找出导致此问题的EF查询,并且需要提高它的性能.

注意:这里的时间是秒

public DbContext() : base("Default")
{
    this.Database.CommandTimeout = 60;
}

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....