ASP.NET Core エラー「InvalidCastException: Unable to cast object of type System.Int32 to type System.Int64.」が表示された場合の対処法

ASP.NET Core エラー「InvalidCastException: Unable to cast object of type System.Int32 to type System.Int64.」が表示された場合の対処法

ASP.NET Coreでエラー「InvalidCastException: Unable to cast object of type System.Int32 to type System.Int64.」が表示された場合の対処法を記述してます。

環境

  • OS windows10 pro
  • IDE Visual Studio 2022
  • .NET Core 6

エラー全文

以下の、sqlserverのテーブルから「dbo.Test」から

以下のModelを使用した際に発生

namespace WebApplication1.Models
{
    public class Test
    {
        public long Id { get; set; }
        public String Name { get; set; }
        public long Age { get; set; }
    }
}

Stack

An unhandled exception occurred while processing the request.
InvalidCastException: Unable to cast object of type 'System.Int32' to type 'System.Int64'.

Microsoft.Data.SqlClient.SqlBuffer.get_Int64()

InvalidCastException: Unable to cast object of type 'System.Int32' to type 'System.Int64'.


Microsoft.Data.SqlClient.SqlBuffer.get_Int64()
Microsoft.Data.SqlClient.SqlDataReader.GetInt64(int i)
lambda_method12(Closure , QueryContext , DbDataReader , ResultContext , SingleQueryResultCoordinator )
Microsoft.EntityFrameworkCore.Query.Internal.SingleQueryingEnumerable<T>+AsyncEnumerator.MoveNextAsync()
Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync<TSource>(IQueryable<TSource> source, CancellationToken cancellationToken)
Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ToListAsync<TSource>(IQueryable<TSource> source, CancellationToken cancellationToken)
WebApplication1.Controllers.TestsController.GetTest() in TestsController.cs

                return await _context.Test.ToListAsync();

lambda_method6(Closure , object )
Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor+AwaitableObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, object controller, object[] arguments)
System.Threading.Tasks.ValueTask<TResult>.get_Result()
System.Runtime.CompilerServices.ValueTaskAwaiter<TResult>.GetResult()
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask<IActionResult> actionResultValueTask)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(ref State next, ref Scope scope, ref object state, ref bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, object state, bool isCompleted)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

原因

型に「long」を使用していたため

対処法

「int」に変更する

namespace WebApplication1.Models
{
    public class Test
    {
        public int Id { get; set; }
        public String Name { get; set; }
        public int Age { get; set; }
    }
}