c# - 实体框架随机 InvalidCastException - 类型字符串,需要 int64
问题描述
我们有随机用户在随机时间收到 InvalidCastException 错误。这是非常零星的。我们正在使用 Entity Framework Core v2.1.4。我们无法按需重现错误。有没有人见过这种情况,或者可以帮助诊断/修复?
读取属性“DataGrid.Id”的数据库值时发生异常。预期类型为“System.Int64”,但实际值为“System.String”类型。
这个函数在我们的应用程序中被调用了很多次,数据库中的 DataGrid.Id 数据类型是一个 bigint。这是我们的模型:
public class DataGrid : IRepositoryEntity<long>
{
[Key]
public long Id { get; set; }
[MaxLength(50)]
public string Name { get; set; }
[ForeignKey("GridId")]
public ICollection<DataGridColumn> Columns { get; set; }
}
这发生在这行代码上:
return await _entitySet.ToListAsync();
让我知道是否可以提供更多信息,这已完全记录在 graylog 中,因此我可以访问它。
堆栈跟踪非常大,但在这里:
在 Microsoft.EntityFrameworkCore.Metadata.Internal.EntityMaterializerSource.ThrowReadValueException[TValue](Exception exception, Object value, IPropertyBase property) at lambda_method(Closure, DbDataReader) at Microsoft.EntityFrameworkCore.Storage.Internal.TypedRelationalValueBufferFactory.Create(DbDataReader dataReader) at Microsoft .EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable 1.AsyncEnumerator.<BufferlessMoveNext>d__12.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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() 在 Microsoft.EntityFrameworkCore.SqlServer.Storage.Internal.SqlServerExecutionStrategy.d__7 2.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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() 在 Microsoft.EntityFrameworkCore.Query.Internal.AsyncQueryingEnumerable 1.AsyncEnumerator.<MoveNext>d__11.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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult() 在System.Linq.AsyncEnumerable.SelectEnumerableAsyncIterator 2.<MoveNextCore>d__7.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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult() 在 System.Linq.AsyncEnumerable.AsyncIterator1.<MoveNext>d__10.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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() 在 Microsoft.EntityFrameworkCore.Query.Internal.AsyncLinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.<MoveNext>d__5.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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable
1.ConfiguredTaskAwaiter.GetResult() 在 System.Linq.AsyncEnumerable.<Aggregate_>d__6 3.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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() 在 Quadax.RCM.Harp.Data.Repository .EntityFrameworkRepository2.<GetAllAsync>d__6.MoveNext() in C:\Bamboo\agent03\xml-data\build-dir\HARP-HDN-HDNWEB\src\Quadax.RCM.Harp.Data\Repository\EntityFrameworkRepository.cs:line 29 --- 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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() 在 Quadax.RCM.Harp.Web.Features.DataGrid.GridConfigService.d__6.MoveNext() 在 C:\Bamboo\agent03\xml-data\build-dir\HARP-HDN-HDNWEB\src\Quadax .RCM.Harp.Web\Features\DataGrid\GridConfigService.cs:第 53 行 --- 在 System.Runtime 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处从先前引发异常的位置结束堆栈跟踪.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Quadax.RCM.Harp.Web.Features.DataGrid.DataGridController.<AllGridConfig>d__7.MoveNext() in C:\Bamboo\agent03\xml-data\build-dir\HARP-HDN-HDNWEB\src\Quadax.RCM.Harp.Web\Features\DataGrid\DataGridController.cs:line 52 --- 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.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult() at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.TaskOfIActionResultExecutor.d__0.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) 在 System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at System.Threading.Tasks.ValueTask
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__12.MoveNext() 处的 1.get_Result() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__10.MoveNext() --- 堆栈结束从先前引发异常的位置跟踪 --- 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker 的 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()。 Next(State& next, Scope& scope, Object& state, Boolean&isCompleted) 在 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.d__13.MoveNext() --- 从先前引发异常的位置结束堆栈跟踪---在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在系统。 Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__23.MoveNext() --- 上一个堆栈跟踪结束抛出异常的位置 --- 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context) 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State&) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() next, Scope& 作用域, Object& 状态, Boolean&isCompleted) 在 Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__18.MoveNext() --- 从先前抛出异常的位置结束堆栈跟踪--- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在 System. Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.d__16.MoveNext() --- 上一个堆栈跟踪结束引发异常的位置 --- System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Microsoft .AspNetCore.Routing.EndpointMiddleware.d__3。MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.d__6.MoveNext() 处的 .CompilerServices.TaskAwaiter.ValidateEnd(Task task) --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo。 Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.d__6。MoveNext() --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 在 System.Runtime 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.d__7.MoveNext() 处的 .CompilerServices.TaskAwaiter.ValidateEnd(Task task) --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo。 Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) at Quadax.RCM.Harp.Web.Startup.SessionIdTracker.d__2.MoveNext() in C:\Bamboo\agent03\xml-data\build-dir\HARP-HDN-HDNWEB\src\Quadax.RCM.Harp.Web\Startup。cs:第 437 行 --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 的 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处。 Microsoft.AspNetCore.Session.SessionMiddleware.d__9.MoveNext() 处的 Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task) --- 从先前引发异常的位置结束堆栈跟踪 --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo Microsoft.AspNetCore.Session.SessionMiddleware.d__9.MoveNext() 处的 .Throw() --- 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 处从先前引发异常的位置结束堆栈跟踪。 System.Runtime 中的 Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)。Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware.d__6.MoveNext() 处的 CompilerServices.TaskAwaiter.ValidateEnd(Task task)
解决方案
推荐阅读
- c - 使用结构的 c 中的函数
- flutter - 谷歌有可能屏蔽华为手机上的所有 Flutter 应用吗
- c# - 使用 C# 在 UWP 应用程序中的单击事件中访问 Button 的父对象
- c++ - 在 HackerRank 练习题中使用 Printf 和 Scanf 的问题
- c - 在c中创建一个对齐的浮点向量
- encoding - 为什么 Outlook 编码在预览中将“:)”表情符号显示为“J”?
- flutter - Flutter:无法在初始化程序中访问实例成员“数据”
- laravel - GraphQL laravel lighthouse 和 vue 部署错误
- r - 缺少参数“mainPanel”,R 闪亮中没有默认值
- swift - UITableViewCell 中的 UIDatePicker 未正确显示并崩溃