Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 实体框架“;“等待操作超时”;关于简单DeleteAll_Asp.net_Sql Server_Entity Framework_Linq - Fatal编程技术网

Asp.net 实体框架“;“等待操作超时”;关于简单DeleteAll

Asp.net 实体框架“;“等待操作超时”;关于简单DeleteAll,asp.net,sql-server,entity-framework,linq,Asp.net,Sql Server,Entity Framework,Linq,我们有一个我继承的MVC web应用程序,它加载,我们称之为MyCategory,并将其所有子项加载到一个webform中,进行编辑,然后单击save保存。应用程序的工作方式是首先删除模型中父级实体的所有数据,然后再添加所有数据。基于此,我们的并发用户数量非常少,每个用户最多只节省20人。我们无法在本地重现此错误,但当离岸团队开始工作时,我们已经开始看到错误 [SqlException(0x80131904):超时已过期。超时时间为 在操作完成之前已过,或者服务器未运行 答复。声明已终止。] 出

我们有一个我继承的MVC web应用程序,它加载,我们称之为MyCategory,并将其所有子项加载到一个webform中,进行编辑,然后单击save保存。应用程序的工作方式是首先删除模型中父级实体的所有数据,然后再添加所有数据。基于此,我们的并发用户数量非常少,每个用户最多只节省20人。我们无法在本地重现此错误,但当离岸团队开始工作时,我们已经开始看到错误

[SqlException(0x80131904):超时已过期。超时时间为 在操作完成之前已过,或者服务器未运行 答复。声明已终止。]

出现错误。在父表上调用从LINQ删除时会发生这种情况(此时它没有数据,子表也没有数据)。这是断断续续的,但在过去的一周里已经发生了好几次,在这一周里,项目的这一部分的工作有所增加

从堆栈跟踪来看,System.Data.SqlClient.SqlCommand.FinishExecuteReader上似乎出现了故障,这似乎持续了109分钟以上。这应该是从表中删除最多tqo记录,从该表加载数据的任何人都应该在很短的时间内检索最多两条记录

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

USE database_name;  
GO  
EXEC sp_updatestats;
调用堆栈是:

[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, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, SqlDataReader ds) +6560327
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite) +586
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, 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, IObjectReaderFactory factory, 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, Guid gId, MyCategoryModel model) +93
编辑:

连接字符串:

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

这是您当前问题的一个临时解决方案。您可以增加
超时时间,如下所示。但您必须找出导致此问题的
EF查询
,并需要改进其性能

注意:这里的时间是


对当前数据库中的所有用户定义表和内部表运行更新统计信息

USE database_name;  
GO  
EXEC sp_updatestats;

参考:

对于特定的查询,您可以编写以下代码

context.Database.CommandTimeout =60*3;
context
是数据库连接对象名
60*3
意味着
180
秒,因为
CommandTimeout
接受
seconds
中的值实际上,这听起来像是服务器问题。您确定服务器可用且响应良好吗?能否显示连接字符串?可能是死锁。它也可以是删除量,因为EF中的删除是逐行执行的,而不是指向一系列记录的单个delete语句。如果建议您找到具有该权限的人,以便查看发生的情况。连接字符串会有所帮助,因为可能存在超时或其他允许死锁的参数。我真傻,竟然认为MS SQL会使其索引保持最新!这重复了这个答案:@GertArnold我不这么认为。有可能有人需要在特定查询中暂停时间。:)只要知道可以设置
CommandTimeout
,就足够了。没有必要详细说明所有可能的用例。