public void Criar(Tarefa tarefa)
        {
            try
            {
                using(ConexaoDeDados conexao = new ConexaoDeDados()){
                    conexao.TbTarefa.Add(tarefa);
                    conexao.SaveChanges();

                }
            }catch
            {
                throw;
            }
        }
        public Usuario BuscarLogin(String login)
        {
            if (String.IsNullOrEmpty(login) || String.IsNullOrWhiteSpace(login))
            {
                throw new ArgumentNullException("login");
            }

            using(conexao = new ConexaoDeDados())
            {
                try
                {
                    return this.conexao.TbUsuario.Where(u => u.Login.Equals(login)).SingleOrDefault<Usuario>();
                }
                catch (Exception)
                {

                    throw;
                }
            }
        }
        public Usuario BuscarPorId(int id)
        {
            if (id == 0){
                throw new ArgumentNullException("id");
            }
            else if (id < 0)
            {
                throw new ArgumentOutOfRangeException("O id precisa ser maior que zero.");
            }

            using(conexao = new ConexaoDeDados())
            {
                try
                {
                    return this.conexao.TbUsuario.Find(id);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
        public ICollection<Tarefa> BuscarTodos()
        {
            try
            {
                using(conexao = new ConexaoDeDados()){
                    var tarefas = conexao.TbTarefa.AsNoTracking().ToList();

                if (tarefas != null && tarefas.Count > 0)
                {
                    return tarefas;
                }
                else
                {
                    return null;
                }
                }

            }
            catch
            {
                throw;
            }
        }
 public Tarefa BuscarPorId(int id)
 {
     try
     {
         using (ConexaoDeDados conexao = new ConexaoDeDados())
         {
             var tarefaPorId = (from t in conexao.TbTarefa.AsNoTracking()
                                  where t.Id == id
                                  select t).FirstOrDefault<Tarefa>();
             if (tarefaPorId != null && tarefaPorId.Id > 0)
             {
                 return tarefaPorId;
             }
             else
             {
                 return null;
             }
         }
     }
     catch
     {
         throw;
     }
 }
        public Usuario BuscarPorNome(String nome, TipoBuscaUsuario chaveBusca)
        {
            if (String.IsNullOrEmpty(nome) || String.IsNullOrWhiteSpace(nome))
            {
                throw new ArgumentNullException("login");
            }

            using(conexao = new ConexaoDeDados())
            {
                try
                {
                    switch (chaveBusca)
                    {
                        case TipoBuscaUsuario.PorNomeCompleto:
                            return conexao.TbUsuario.Where(u => u.NomeCompleto.Equals(nome)).SingleOrDefault<Usuario>();
                        case TipoBuscaUsuario.PorTrechoInicial:
                            return conexao.TbUsuario.Where(u => u.NomeCompleto.StartsWith(nome)).SingleOrDefault<Usuario>();
                        case TipoBuscaUsuario.PorTrechoFinal:
                            return conexao.TbUsuario.Where(u => u.NomeCompleto.EndsWith(nome)).SingleOrDefault<Usuario>();
                        case TipoBuscaUsuario.PorFragmento:
                            return conexao.TbUsuario.Where(u => u.NomeCompleto.Contains(nome)).SingleOrDefault<Usuario>();
                        default:
                            return null;
                    }
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
        public void Gravar(Usuario usuario)
        {
            using(conexao = new ConexaoDeDados())
            {
                try
                {
                    conexao.TbUsuario.Add(usuario);

                    usuario.Senha = GeraHashMd5(usuario.Senha);

                    conexao.SaveChanges();
                }
                catch (DbEntityValidationException dbEx)
                {
                    foreach(var erro in dbEx.EntityValidationErrors){
                        foreach (var linha in erro.ValidationErrors)
                        {
                            linha.ErrorMessage.ToString();
                        }
                    }
                    throw;
                }
            }
        }
 public void Excluir(int id)
 {
     try
     {
         using (ConexaoDeDados conexao = new ConexaoDeDados())
         {
             Tarefa tarefa = new Tarefa();
             tarefa.Id = id;
             conexao.TbTarefa.Remove(tarefa);
             conexao.SaveChanges();
         }
     }
     catch
     {
         throw;
     }
 }
 public void Editar(Tarefa tarefa)
 {
     try
     {
         using (ConexaoDeDados conexao = new ConexaoDeDados())
         {
             conexao.Entry(tarefa).State = EntityState.Modified;
             conexao.SaveChanges();
         }
     }
     catch
     {
         throw;
     }
 }