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>