Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Problema no metodo BuscaPorId

Olá estou fazendo o projeto manipulando algumas tarefas do trabalho que tenho q utilizar tabelas ja existentes, consegui criar e usar o metodo para salvar porem o e retorno de usuario BuscaPorId devolve o seguinte erro:

An unhandled exception of type 'System.ArgumentNullException' occurred in System.Core.dll

Additional information: Valor não pode ser nulo.

codigo do DAO:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EnityAgain.Entidades.DAO
{
    class UsuarioDAO
    {
        private EntityContext contexto;

        public UsuarioDAO()
        {
            contexto = new EntityContext();
        }

        public void SalvaUsuario(Usuario user)
        {
            contexto.Add(user);
            contexto.SaveChanges();
        }

        public Usuario BuscaPorId(int id)
        {
            return contexto.Usuarios.FirstOrDefault(u => u.id == id);
        }
    }
}

codigo da entidade:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Data.Entity;

namespace EnityAgain.Entidades
{
    class EntityContext :DbContext
    {
        public DbSet<Usuario> Usuarios { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer("Data Source=localhost;Initial Catalog=Projetos;Integrated Security=True");
            base.OnConfiguring(optionsBuilder);
        }
    }
}

Codigo do Usuario (sendo que o proprio banco incrementa o ID):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EnityAgain.Entidades
{
    class Usuario
    {
        public string nome { get; set; }
        public string cpf { get; set;}
        public int id { get; private set; }

        public Usuario(string nome, string cpf)
        {
            this.nome = nome;
            this.cpf = cpf;
        }
    }
}

codigo do main do programa:

using EnityAgain.Entidades;
using EnityAgain.Entidades.DAO;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EnityAgain
{
    class Program
    {
        static void Main(string[] args)
        {
            UsuarioDAO dao = new UsuarioDAO();
            Usuario usuario = dao.BuscaPorId(3);
            Console.ReadKey();
            Console.WriteLine(usuario.nome);

        }
    }
}

Aguardo resposta para prosseguir com os estudo Att.

5 respostas

Boa noite,

Antes de imprimir utilizando o Console.WriteLine(usuario.nome); Verifique se o usuário não está nulo

if (usuario != null)
            {
                Console.WriteLine(usuario.nome);
         Console.ReadKey();
            }

amigo ele nem chega nesta linha ele para em

public Usuario BuscaPorId(int id)
        {
            return contexto.Usuarios.FirstOrDefault(u => u.id == id);
        }

e mesmo dando continue ele nao volta porem ele está voltando nulo sim, adaptei o metodo com try e inputei o exception, segue abaixo:

An exception was thrown while attempting to evaluate the LINQ query parameter expression 'null.id'
solução!

Bom dia!

Altera sua classe usuário para:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace EnityAgain.Entidades
{
    class Usuario
    {
        public string nome { get; set; }
        public string cpf { get; set; }
        public int id { get; private set; }

        public Usuario()
        {                
        }

        public Usuario(string nome, string cpf)
        {
            this.nome = nome;
            this.cpf = cpf;
        }
    }
}

Luis obg, muito bem observado o metodo construtor não atendia minha requisição não havia reparado isto, muito obrigado

Por nada, bons estudos. Fico feliz em ter ajudado!