1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

C# Erro NullReferenceException em método ToList()

Olá pessoal, tudo bom?

Estou trabalhando num projeto em C# MVC para WEB com o EntityFramework. Consegui configurá-lo junto ao banco de dados e também instalei o Ninject.

O primeiro controller que estou trabalhando é a de Usuários. Quero criar um ambiente para manutenção desses dados, como consultar, adicionar, remover e etc. Então eu criei as classes, controllers, views e etc. Por enquanto o banco de dados está vazio.

Ocorre que estou com um problema justamente na listagem. Ao tentar chamar a View "Index" do "UsuarioController", ele gera o erro abaixo no método de listagem "Lista()" em "UsuariosDAO"

An exception of type 'System.NullReferenceException' occurred in Aplicacoes.dll but was not handled in user code

Additional information: Referência de objeto não definida para uma instância de um objeto.

Eis o código:

//UsuarioController

    private UsuarioDAO uDao;

    public UsuarioController(UsuarioDAO uDao)
    {
        this.uDao = uDao;
    }
    public ActionResult Index()
    {
        IList<Usuarios> usuarios = uDao.Lista();
        return View(usuarios);
    }

//UsuariosDAO

private AplicacoesContexto contexto;
public void UsuariosDAO(AplicacoesContexto contexto){
 this.contexto = contexto;
}

public IList<Usuarios> Lista()
{

    return contexto.usuarios.ToList(); //o erro é aqui

}

//Index.cshtml de UsuarioController

@model IList<Aplicacoes.Entidades.Usuarios>

@{
    ViewBag.Title = "Usuários";
}
<h4>Lista de Usuários</h4>
<table class="table">
    <thead>
        <tr>
            <th>Id</th>
            <th>Matricula</th>
            <th>DV</th>
            <th>Nome</th>
            <th>Cargo</th>
            <th>Função</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var usuario in @Model)
        {
            <tr>
                <td>@usuario.Id</td>
                <td>@usuario.Matricula</td>
                <td>@usuario.MatriculaDV</td>
                <td>@usuario.Nome</td>
                <td>@usuario.Cargo.Cargo</td>
                <td>@usuario.Funcao.Funcao</td>
            </tr>
        }
    </tbody>
</table>

//Classe Usuarios.cs

    public class Usuarios
    {

        public int Id { get; set; }

        [Required, StringLength(60)]
        public string Nome { get; set; }

        [DisplayName("Matrícula"),StringLength(7)]
        public string Matricula {get;set;}

        [DisplayName("DV"),Required]
        public int MatriculaDV {get;set;}

        [StringLength(20)]
        public string OAB {get;set;}

        [DisplayName("Gênero")]
        public Genero Genero { get; set; } 
        public bool Ativo {get;set;}

        [DisplayName("Data de Nascimento")]
        public DateTime DataNascimento { get; set; }


        public virtual int? UnidadesID {get;set;}
        public virtual Unidades Unidade {get;set;}

        public virtual int? CargosID { get; set; }
        public virtual Cargos Cargo { get; set; }

        public virtual int? FuncoesID {get;set;}
        public virtual Funcoes Funcao {get;set;}

        public virtual ctmdPermissoes ctmdPermissao { get; set; }

    }

O que encontrei na internet me descreve que o método ToList() não aceita valor nulo e que a solução deveria instanciá-lo antes. Fiz o código abaixo e não funcionou comigo:

IList<Usuarios> lista = new List<Usuarios>;
lista = this.contexto.usuarios.ToList(); //o erro é aqui
return lista;

Fiz o curso no Alura e todos os exercícios que fiz nesse modelo funcionaram. Mas quando fui criar outro eu me dei mal! Venho por aqui, então, pedir ajuda para superar esse erro, pois não consigo avançar mais =(

Obrigado pela atenção.

Romulo Nascimento

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags null dao entity-framework ou faça a sua própria pergunta.