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

Inserindo um objeto com resposta diferente das explicacoes

Vossa pergunta para inserir produto: Escreva o código para inserir o seguinte objeto na base de dados:

Produto produto = new Produto();
produto.Nome = "Teclado";
produto.Preco = 20.0;

Vossa resposta e sem nem acrescentar o código acima:

ISession session = NHibernateHelper.AbreSession();

ITransaction transacao = session.BeginTransaction();
session.Save(produto);
transacao.Commit();

session.Close();
insira seu código aqui

Explicacao na aula para inserir usuario: " Inserindo e Alterando Dados Salvando uma nova entidade

Quando queremos inserir dados no banco, precisamos abrir uma conexão. Com o NHibernate, utilizaremos um componente que faz o papel da conexão com o banco de dados chamado NHibernate.ISession. "


            Configuration cfg = NHibernateHelper.RecuperaConfiguracao();
            ISessionFactory sessionFactory = cfg.BuildSessionFactory();

            ISession session = sessionFactory.OpenSession();

            Usuario novoUsuario = new Usuario();
            novoUsuario.Nome = "Murilo"; 

            ITransaction transacao = session.BeginTransaction();
            session.Save(novoUsuario);
            transacao.Commit();

            session.Close();

Minha pergunta:

A diferenca foi só o facto de nao ter sido inserido em vossas respostas a parte do código dado na pergunta?

Obrigado

6 respostas

Para o texto anterior nao ficar grande, escrevo este.

Tenho um erro na linha comentada do UsuarioDao e por isto já nao consegui fazer mais nada na BD para além de ter inserido o 1o usuario= Murilo.

namespace Loja.DAO
{
    public class UsuarioDAO
    {
        private ISession session;


        public UsuarioDAO(ISession session)
        {
            this.session = session;
        }


        //public void Adiciona(Usuario usuario)
        //{
        //    ITransaction transacao = session.BeginTransaction();
        //    session.Save(usuario);
        //    transacao.Commit();
        //}
        //public Usuario BuscaPorId(int id)
        //{
        //    return session.Get<Usuario>(id);
        //}

    }
}

Error 12 Inconsistent accessibility: parameter type 'Loja.Entidades.Usuario' is less accessible than method 'Loja.DAO.UsuarioDAO.Adiciona(Loja.Entidades.Usuario)' C:\Users\graziela\Desktop\Alura\NHibernate\Loja\Loja\DAO\UsuarioDAO.cs 26 21 Loja

**Mesmo erro no metodo BuscaPorId()

solução!

Graziela,

Dividindo nas duas perguntas...

1) A diferenca foi só o facto de nao ter sido inserido em vossas respostas a parte do código dado na pergunta?

Não entendi sua dúvida. A única diferença entre os dois exemplos que você deu é que um insere um produto e o outro um usuário, mas o código é o mesmo, praticamente.

2) Error 12 Inconsistent accessibility: parameter type 'Loja.Entidades.Usuario' is less accessible than method 'Loja.DAO.UsuarioDAO.Adiciona(Loja.Entidades.Usuario)'

Eu destaquei em negrito a parte que te diz a resposta do seu problema. Ele diz que a classe Usuario é menos acessível do que o método Adiciona.

Isso significa que a sua classe Usuario não é pública. Experimente adicionar o public na classe Usuario que esse erro não irá mais acontecer.

Olá Arthur,

Agradeco muito por tua ajuda, pois nunca tenho conseguido terminar os tutoriais aqui :(

1a dúvida, era mesmo isto que queria saber, pois nao resposta da aula aqui está de forma diferente. A resposta nao condiz com a pergunta. Acima é meu copy/paste.

2a dúvida: Já tentei... No exercicio foi dado como privado se vc fosse ver a aula, mas mesmo eu tendo tentado com o publica nao deu, o mesmo erro permanenceu... pois isto continuo com zudo comentádo.

O estranho é que na modfiquei nada no codigo, pois isto ai é um copy/paste da aula

Isto nao foi solucionado. Quem colocou como Solucionado?

Oi, Graziela.

Não sei quem marcou como solucionado, mas continuamos assim mesmo...

Só para confirmar, você colocou tanto o método como public quanto a classe?

Seu código para funcionar tem que estar assim:

Usuario.cs

public class Usuario     
{         
    public virtual int Id { get; set; }         
    public virtual string Nome { get; set; }      
}

UsuarioDAO.cs

public class UsuariosDAO
{
    private ISession session;

    public UsuarioDAO()
    {
        this.session = NHibernateHelper.AbreSession();
    }

    public void Adiciona(Usuario usuario)
    {
        ITransaction transacao = session.BeginTransaction();
        session.Save(usuario);
        transacao.Commit();
    }

    public Usuario BuscaPorId(int id)
    {
        return session.Get<Usuario>(id);
    }
}

Veja que tanto os métodos quanto as classes são públicos. Somente o atributo session do DAO que é private.

Isso deveria solucionar o problema de less acessible. Pode ser que dê outro erro, mas esse tem que resolver.

Tente novamente, por favor.

Solucionada agora :D :D

Obrigadissimo Arthur.

Realmente foi minha falta de atencao tanto na leitura do erro como em tua 1a explicacao, pois no erro menciona que a entidade usuario é menos acessivel que seu DAO, apesar de que a entidade produto também nao estava como publica e nao deu erro com os mesmos codigos, enfim....

Te agradeco mais uma vez...

Já agora, poderias ajudar me com este erro abaixo por favor?

https://cursos.alura.com.br/forum/topico-informacoes-insuficiente-para-entender-como-proceder-a-criancao-dos-filtros-26001

Nao consigo continuar por causa deste erro.

Muito agradecida

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software