首页 > 解决方案 > 指定的强制转换在 Visual Studio 2019 中无效

问题描述

我在 Visual Studio 2019 中有一个使用 Oracle 数据库的 ASP.NET Core Web 应用程序 C#,当我运行它时,它会打开主页,上面只有一个链接,当我单击时,它会抛出一个未处理的异常,指定演员表无效。

TipoProdutoRepository.cs代码:

using FiapSmartCity.Models;
using FiapSmartCity.Repository.Context;
using System.Collections.Generic;
using System.Linq;

namespace FiapSmartCity.Repository
{
    public class TipoProdutoRepository
    {

        private readonly DataBaseContext context;

        public TipoProdutoRepository()
        {
            context = new DataBaseContext();
        }
        public IList<TipoProduto> Listar()
        {
            return context.TipoProduto.ToList();
        }
        public TipoProduto Consultar(int id)
        {
            return context.TipoProduto.Find(id);
        }
        public void Inserir(TipoProduto tipoProduto)
        {
            context.TipoProduto.Add(tipoProduto);
            context.SaveChanges();
        }
        public void Alterar(TipoProduto tipoProduto)
        {
            context.TipoProduto.Update(tipoProduto);
            context.SaveChanges();
        }
        public void Excluir(int id)
        {      
            var tipoProduto = new TipoProduto()
            {
                IdTipo = id
            };
            context.TipoProduto.Remove(tipoProduto);
            context.SaveChanges();
        }
    }
}

错误在:

return context.TipoProduto.ToList();

TipoProdutoController.cs代码:

using FiapSmartCity.Models;
using FiapSmartCity.Repository;
using Microsoft.AspNetCore.Mvc;
namespace FiapSmartCity.Controllers
{
    public class TipoProdutoController : Controller
    {
        private readonly TipoProdutoRepository tipoProdutoRepository;
        public TipoProdutoController()
        {
            tipoProdutoRepository = new TipoProdutoRepository();
        }
        [HttpGet]
        public IActionResult Index()
        {
            var listaTipo = tipoProdutoRepository.Listar();
            return View(listaTipo);
        }
        [HttpGet]
        public ActionResult Cadastrar()
        {
            return View(new TipoProduto());
        }        
        [HttpPost]
        public ActionResult Cadastrar(Models.TipoProduto tipoProduto)
        {
            if (ModelState.IsValid)
            {
                tipoProdutoRepository.Inserir(tipoProduto);
                @TempData["mensagem"] = "Tipo cadastrado com sucesso!";
                return RedirectToAction("Index", "TipoProduto");
            }
            else
            {
                return View(tipoProduto);
            }
        }
        [HttpGet]
        public ActionResult Editar(int Id)
        {
            var tipoProduto = tipoProdutoRepository.Consultar(Id);
            return View(tipoProduto);
        }
        [HttpPost]
        public ActionResult Editar(Models.TipoProduto tipoProduto)
        {
            if (ModelState.IsValid)
            {
                tipoProdutoRepository.Alterar(tipoProduto);
                @TempData["mensagem"] = "Tipo alterado com sucesso!";
                return RedirectToAction("Index", "TipoProduto");
            }
            else
            {
                return View(tipoProduto);
            }
        }
        [HttpGet]
        public ActionResult Consultar(int Id)
        {
            var tipoProduto = tipoProdutoRepository.Consultar(Id);
            return View(tipoProduto);
        }
        [HttpGet]
        public ActionResult Excluir(int Id)
        {
            tipoProdutoRepository.Excluir(Id);
            @TempData["mensagem"] = "Tipo removido com sucesso!";
            return RedirectToAction("Index", "TipoProduto");
        }
    }
}

错误在:

var listaTipo = tipoProdutoRepository.Listar();

这是完整的例外:

System.InvalidCastException: Specified cast is not valid.
   at Oracle.ManagedDataAccess.Client.OracleDataReader.GetBoolean(Int32 i)
   at lambda_method(Closure , DbDataReader )
   at Microsoft.EntityFrameworkCore.Storage.Internal.TypedRelationalValueBufferFactory.Create(DbDataReader dataReader)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.BufferlessMoveNext(DbContext _, Boolean buffer)
   at Oracle.EntityFrameworkCore.Storage.Internal.OracleExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable`1.Enumerator.MoveNext()
   at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider._TrackEntities[TOut,TIn](IEnumerable`1 results, QueryContext queryContext, IList`1 entityTrackingInfos, IList`1 entityAccessors)+MoveNext()
   at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext()
   at System.Collections.Generic.List`1.AddEnumerable(IEnumerable`1 enumerable)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at FiapSmartCity.Repository.TipoProdutoRepository.Listar() in C:\Users\raphael\source\repos\FiapSmartCity\Repository\TipoProdutoRepository.cs:line 23
   at FiapSmartCity.Controllers.TipoProdutoController.Index() in C:\Users\raphael\source\repos\FiapSmartCity\Controllers\TipoProdutoController.cs:line 16
   at lambda_method(Closure , Object , Object[] )
   at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
   at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextResourceFilter()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Rethrow(ResourceExecutedContext context)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeFilterPipelineAsync()
   at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeAsync()
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.Routing.EndpointRoutingMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke(HttpContext context)
   at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

标签: c#asp.net-mvcasp.net-core

解决方案


推荐阅读