繁体   English   中英

实体框架更新大表失败 - 异常:等待操作超时

[英]Entity Framework update on large table failing - Exception: The wait operation timed out

实体框架 6.1.3 更新大表在生产环境中失败

例外:

等待操作超时

我有一个包含近 8000000 条记录的Issue表。 插入记录时出现异常

等待操作超时

在插入记录时,我们在 SQL 事务中执行一些后台任务。

  1. Notification表中插入值(向用户发送通知)。
  2. Change表中插入值。 Change表保留了历史更改值、旧值、新值等。我认为这个事务会导致超时异常。 需要一些输入
-- statement #1
begin transaction with isolation level: ReadCommitted

-- statement #2
UPDATE [dbo].[Issues]
SET [CategoryID] = @0, [SubcategoryID] = @1, [HandlerID] = @2, [Modified] = @3, [RegionID] = @4, [TeamID] = @5, [Closed] = @6, [Address] = @7, [AddressDetails] = @8, [Description] = @9, [Location] = @10, [Status] = @11, [Visibility] = @12, [ReportedBy_Address] = @13, [ReportedBy_EmailAddress] = @14, [ReportedBy_Name] = @15, [ReportedBy_PhoneNumber] = @16, [ForwardedMessage] = @17, [IsUrgent] = @18, [IsNewlyAssigned] = @19, [CategoryField] = @20, [IntegrationFault] = @21
WHERE ([ID] = @22)

-- statement #3
INSERT [dbo].[ChangeSets]([Created], [ApplicationID], [UserID])
VALUES (@0, @1, NULL)
SELECT [ID]
FROM [dbo].[ChangeSets]
WHERE @@ROWCOUNT > 0 AND [ID] = scope_identity()

-- statement #4
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #5
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #6
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #7
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #8
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #9
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #10
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #11
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #12
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #13
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #14
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #15
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #16
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #17
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #18
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #19
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #20
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #21
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Changes]([ChangeSetID], [EntityID], [Name], [Type], [PreviousValue], [NewValue])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, @1, @2, @3, @4, @5)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Changes] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #22
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Notifications]([Created], [CreatedByID], [Modified], [ModifiedByID], [UserID], [Person_Address], [Person_EmailAddress], [Person_Name], [Person_PhoneNumber], [Type], [IssueID], [CommentID], [AttachmentID], [RegionID], [OrganizationID], [IsHidden], [IsRead])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, NULL, NULL, NULL, @1, NULL, NULL, NULL, NULL, @2, @3, NULL, NULL, @4, @5, @6, @7)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Notifications] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #23
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Notifications]([Created], [CreatedByID], [Modified], [ModifiedByID], [UserID], [Person_Address], [Person_EmailAddress], [Person_Name], [Person_PhoneNumber], [Type], [IssueID], [CommentID], [AttachmentID], [RegionID], [OrganizationID], [IsHidden], [IsRead])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, NULL, NULL, NULL, NULL, NULL, @1, @2, NULL, @3, @4, NULL, NULL, @5, @6, @7, @8)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Notifications] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #24
DECLARE @generated_keys table([ID] uniqueidentifier)
INSERT [dbo].[Notifications]([Created], [CreatedByID], [Modified], [ModifiedByID], [UserID], [Person_Address], [Person_EmailAddress], [Person_Name], [Person_PhoneNumber], [Type], [IssueID], [CommentID], [AttachmentID], [RegionID], [OrganizationID], [IsHidden], [IsRead])
OUTPUT inserted.[ID] INTO @generated_keys
VALUES (@0, NULL, NULL, NULL, NULL, @1, @2, @3, @4, @5, @6, NULL, NULL, @7, @8, @9, @10)
SELECT t.[ID]
FROM @generated_keys AS g JOIN [dbo].[Notifications] AS t ON g.[ID] = t.[ID]
WHERE @@ROWCOUNT > 0

-- statement #25
commit transaction

例外

错误:System.Data.Entity.Infrastructure.DbUpdateException:更新条目时出错。 有关详细信息,请参阅内部异常。 ---> System.Data.Entity.Core.UpdateException:更新条目时出错。 有关详细信息,请参阅内部异常。 ---> System.Data.SqlClient.SqlException: 执行超时已过期。 操作完成前超时时间已过或服务器未响应。 ---> System.ComponentModel.Win32Exception: 等待操作超时 --- 内部异常堆栈跟踪结束 --- 在 System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action 1 wrapCloseInAction) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) at System.Data.SqlClient.SqlCommand.InternalEndExecuteNonQuery(IAsyncResult asyncResult, String endMethod, Boolean isInternal) at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryInternal(IAsyncResult asyncResult) at System.Data.SqlClient.SqlCommand.EndExecuteNonQueryAsync(IAsyncResult asyncResult) at System.Threading.Tasks.TaskFactory 1.FromAsyncCoreLogic(IAsyncResult iar, Func 2 endFunction, Action 1 endAction, Task 1 promise, Boolean requiresSynchronization) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.d__0.MoveNext() --- End of inner exception stack trace --- at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Objects.ObjectContext.d__3d 1 promise, Boolean requiresSynchronization) --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.d__0.MoveNext() --- End of inner exception stack trace --- at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.d__0.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Objects.ObjectContext.d__3d 1.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束---在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runt ime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Objects.ObjectContext.d__39.MoveNext() --- 从上一个抛出异常的位置结束堆栈跟踪---在 System.Runtime .ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.d__9 1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Objects.ObjectContext.d__31.MoveNext() --- End of inner exception stack trace --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Decos.Fixi.Data.FixiContext.d__80.MoveNext() in E:\\_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.Data\\FixiContext.cs:line 200 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Decos.Fixi.Data.FixiContext.d__80.MoveNext() in E:\\_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.Data\\FixiContext.cs:line 207 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Decos.Fixi.Data.Services.ServiceBase 1.MoveNext() --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Data.Entity.Core.Objects.ObjectContext.d__31.MoveNext() --- End of inner exception stack trace --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Decos.Fixi.Data.FixiContext.d__80.MoveNext() in E:\\_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.Data\\FixiContext.cs:line 200 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Decos.Fixi.Data.FixiContext.d__80.MoveNext() in E:\\_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.Data\\FixiContext.cs:line 207 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Decos.Fixi.Data.Services.ServiceBase 2.d__15.MoveNext() in E:_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.Data \\Services\\ServiceBase.cs:line 181 --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerN 在 E:_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.Data\\Services\\IssueService 中的 Decos.Fixi.Data.Services.IssueService.d__19.MoveNext() 中的通知(任务任务)。 cs:line 277 --- 从前一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Decos。 Fixi.WebApi.Controllers.IssuesController.d__20.MoveNext() in E:_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.WebApi\\Controllers\\IssuesController.cs:line 593 --- 结束来自先前抛出异常的位置的堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Threading.Tasks.TaskHelpersExtensions.d__3` 1.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServi ces.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext() --- 从上一个异常位置的堆栈跟踪结束抛出 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() --- End来自上一个抛出异常的位置的堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() --- 上一个堆栈跟踪的结束抛出异常的位置 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Web.Http.Filters.ActionFilter Attribute.d__0.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() --- 在 System.Web 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 从上一个抛出异常的位置结束堆栈跟踪。 Http.Filters.ActionFilterAttribute.d__5.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (任务任务)在 System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处系统R untime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束---在 System.Runtime.ExceptionServices .ExceptionDispatchInfo.Throw() 在 System.Web.Http.Filters.ActionFilterAttribute.d__5.MoveNext() --- 从上一个抛出异常的位置的堆栈跟踪结束 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw( ) 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Web.Http.Filters.ActionFilterAttribute.d__0.MoveNext() --- 从上一个抛出异常的位置开始的堆栈跟踪结束 --- 在 System .Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext() --- 堆栈跟踪结束之前抛出异常的位置 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Web.Http.Filters.AuthorizationFilterAttribute.d__2.MoveNext( ) --- 从上一个抛出异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Decos.Fixi.WebApi .Annotations.AuthenticateApplicationAttribute.d__8.MoveNext() in E:_work4\\10\\s\\Fixi2\\Main\\Decos.Fixi.Api\\Decos.Fixi.WebApi\\Annotations\\ApplicationAuthenticationAttribute.cs:line 108 --- 堆栈跟踪结束从上一个抛出异常的位置 --- 在 System.Web.Http.Controllers.AuthenticationFilterResult.d__0.MoveNext() 上的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() --- 上一个位置的堆栈跟踪结束,其中 ex ception 被抛出 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Web.Http.Controllers.ExceptionFilterResult.d__0.MoveNext()

不确定您使用的是什么版本的 EF,但不管您是否需要设置命令超时。 它默认为 30 秒,因此对您不起作用。

在 EF 6 中,它是这样设置的: this.context.Database.CommandTimeout = 0; EF 5,类似这样: ((IObjectContextAdapter)this.context).ObjectContext.CommandTimeout = 0; 在 EF 核心中: this.context.Database.SetCommandTimeout(0);

该值以秒为单位。 如果将该值设置为 0,则为“无限制”。 我会说这就是你所需要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM