1
resposta

Erro Referência de objeto não definida para uma instância de um objeto (campo Usuario.Nome)

Olá,

Ao acessar "Movimentações" no menu, tenho o erro Referência de objeto não definida para uma instância de um objeto destacando o campo m.Usuario.Nome. Este mesmo erro ocorreu no vídeo, porém, ele não havia setado a propriedade Usuario de Movimentacao como virtual; a minha está certa....

O que será? Por favor me ajudem...

Erro ao executar

Erro de Servidor no Aplicativo '/'.
Referência de objeto não definida para uma instância de um objeto.
Descrição: Ocorreu uma exceção sem tratamento durante a execução da atual solicitação da Web. Examine o rastreamento de pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da Exceção: System.NullReferenceException: Referência de objeto não definida para uma instância de um objeto.

Erro de Origem:


Linha 17:             <tr>
Linha 18:                 <td>@m.Id</td>
Linha 19:                 <td>@m.Usuario.Nome</td>
Linha 20:                 <td>@m.Valor</td>
Linha 21:                 <td>@m.Tipo</td>


Arquivo de Origem: C:\Users\Eduardo Agostinho\_Programação\Estudos\Alura\MVC Financeiro\Financas\Financas\Views\Movimentacao\Index.cshtml    Linha: 19

Rastreamento de Pilha:


[NullReferenceException: Referência de objeto não definida para uma instância de um objeto.]
   ASP._Page_Views_Movimentacao_Index_cshtml.Execute() in C:\Users\Eduardo Agostinho\_Programação\Estudos\Alura\MVC Financeiro\Financas\Financas\Views\Movimentacao\Index.cshtml:19
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +197
   System.Web.Mvc.WebViewPage.ExecutePageHierarchy() +105
   System.Web.WebPages.StartPage.RunPage() +17
   System.Web.WebPages.StartPage.ExecutePageHierarchy() +64
   System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +78
   System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) +256
   System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) +107
   System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) +291
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) +13
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +56
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) +420
   System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult) +52
   System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +173
   System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +100
   System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +10
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +27
   System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +13
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +36
   System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +12
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +22
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +26
   System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +10
   System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +21
   System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +29
   System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +49
   System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +28
   System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +9
   System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9765121
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

Segue códigos:

 public class Movimentacao
    {
        public int Id { get; set; }
        public decimal Valor { get; set; }
        public DateTime Data { get; set; }
        public Tipo Tipo { get; set; }
        public int UsuarioId { get; set; }
        public virtual Usuario Usuario { get; set; }
    }
 public class FinancasContext : DbContext
    {
        public DbSet<Usuario> Usuarios { get; set; }
        public DbSet<Movimentacao> Movimentacoes { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            string stringConexao = ConfigurationManager.ConnectionStrings["FinancasConnectionString"].ConnectionString;
            optionsBuilder.UseSqlServer(stringConexao);
            base.OnConfiguring(optionsBuilder);
        }

        //COMENTEI O CONTEÚDO SENÃO, DURANTE A EXECUÇÃO DO MIGRATIONS OCORRE O ERRO:
        //The property 'Usuario' cannot be added to the entity type 'Movimentacao' because a navigation property with the same name already exists on entity type 'Movimentacao'.
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            //modelBuilder.Entity<Movimentacao>().HasKey(m => m.Usuario);
            //base.OnModelCreating(modelBuilder);
        }
    }
 public class MovimentacaoController : Controller
    {
        private MovimentacaoDAO movimentacaoDAO;
        private UsuarioDAO usuarioDAO;

        public MovimentacaoController(MovimentacaoDAO movimentacaoDAO, UsuarioDAO usuarioDAO)
        {
            this.movimentacaoDAO = movimentacaoDAO;
            this.usuarioDAO = usuarioDAO;
        }

        // GET: Movimentacao
        public ActionResult Form()
        {
            ViewBag.Usuarios = usuarioDAO.Lista();
            return View();
        }

        public ActionResult Adiciona(Movimentacao movimentacao)
        {
            if (ModelState.IsValid)
            {
                movimentacaoDAO.Adiciona(movimentacao);
                return RedirectToAction("Index");
            }
            else
            {
                ViewBag.Usuarios = usuarioDAO.Lista();
                return View("Form", movimentacao);
            }
        }

        public ActionResult Index()
        {
            IList<Movimentacao> movimentacoes = movimentacaoDAO.Lista();
            return View(movimentacoes);
        }
    }
@model IList<Financas.Entidades.Movimentacao>

@Html.ActionLink("Nova Movimentação", "Form", "Movimentacao")

<table class="table table-hover">
    <thead>
        <tr>
            <th>Id</th>
            <th>Usuario</th>
            <th>Valor</th>
            <th>Tipo</th>
        </tr>
    </thead>
    <tbody>
        @foreach(var m in Model)
        {
            <tr>
                <td>@m.Id</td>
                <td>@m.Usuario.Nome</td>
                <td>@m.Valor</td>
                <td>@m.Tipo</td>
            </tr>
        }
    </tbody>
</table>
1 resposta

Oi Eduardo, tudo bom?

Pelo seu erro, parece que na sua view Movimentacao\Index.cshtml o usuario está nulo:

Linha 19:                 <td>@m.Usuario.Nome</td>

Verifica se você está populando certinho o objeto m. Caso você esteja encontrando dificuldade para achar o problema, você também pode verificar aqui no projeto pronto referente a essa aula:

https://cursos.alura.com.br/course/projeto-asp-net-mvc-5-entity-framework/task/21179

Qualquer dificuldade, compartilha com a gente =)