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

Inserção/Alteração de Dados Many-to-Many

Como faço para realizar uma inserção de dados que Many-to-Many? No meu projeto tenho as classes Cidadaos e Imoveis, cada uma tem um Ilist da outra em suas propriedades, como vou preencher essas propriedades na hora de fazer um registro novo?

Eu quero cadastrar um imóvel novo, porém quando eu insiro um Cidadao na propriedade de imoveis essa não tem sua propriedade Imoveis preenchida e vice e versa gerando uma NullReferenceException, eu forcei a inserção com um Try Catch e funcionou mas aí a tabela intermediária não recebeu registros e assim não sou capaz de fazer consultas usando as duas tabelas.

Como faço esse insert da forma correta? Fiz assim?

Classe Imoveis

public class Imoveis
    {
        public virtual int cod_imovel { get; set; }
        public virtual IList<Cidadaos> Cidadao { get; set; } //Relacionamento N:N com a tabela Cidadaos
        public virtual Queixas Queixa { get; set; } //Chave estrangeira da tabela Queixas
        public virtual IList<Rotas> Rota { get; set; } //Relacionamento N:N com a tabela Rotas
        public virtual Ruas Rua { get; set; } //Chave estrangeira da tabela Ruas
        public virtual string Numero { get; set; }
        public virtual Bairros Bairro { get; set; } //Chave estrangeira da tabela Bairros
        public virtual string Quadra { get; set; }
        public virtual string Lote { get; set; }

    }

Classe Cidadaos

public virtual int cod_cidadao {get; set;}
        public virtual IList<Imoveis> Imovel { get; set; } //Relacionamento N:N com 
        public virtual string Nome { get; set; }
        public virtual string Endereco { get; set; }
        public virtual Cidades Cidade { get; set; } //Chave Estrangeira de Cidades
        public virtual string Cep { get; set; }
        public virtual string CPF { get; set; }
        public virtual string RG { get; set; }
        public virtual string Telefone { get; set; }
        public virtual string Email { get; set; }
 //Instanciando Ferramentas
            ISession session = NHibernateHelper.AbreSessao();
            Imoveis imo = new Imoveis();
            ImovelDAO imoDAO = new ImovelDAO(session);

            //Instanciando Cidadao
            Cidadaos c = new Cidadaos();
            CidadaoDAO cidDAO = new CidadaoDAO(session);

            //Instanciando Rua
            RuaDAO ruaDAO = new RuaDAO(session);

            //Instanciando Bairro
            BairroDAO bairroDAO = new BairroDAO(session);

            //Inserção de Dados no Objeto
            IList<Cidadaos> cidadaos = null;


            imo.Rua = ruaDAO.BuscaPorCod(Convert.ToInt32(txtCodRua.Text));
            imo.Bairro = bairroDAO.BuscaPorCod(Convert.ToInt32(txtCodBairro.Text));
            imo.Numero = txtNumero.Text;
            imo.Quadra = txtQuadra.Text;
            imo.Lote = txtLote.Text;

            try
            {
                for (int i = 0; i < txtProprietario.Rows.Count; i++)
                {
                    c = cidDAO.BuscaPorCod(
                                    Convert.ToInt32(txtProprietario.Rows[i].Cells[0].Value.ToString()));
                    imo.Cidadao.Add(c);
                }
                imo.Cidadao = cidadaos;
            }
            catch (NullReferenceException)
            {
            }

            if (acao == "Incluir")
                imoDAO.Adiciona(imo);

            else
            {
                imo.cod_imovel = imovel.cod_imovel;
                imoDAO.Updtae(imo);
            }

            MessageBox.Show("Operação concluída com sucesso!");

            this.Close();
3 respostas
solução!

Olá Guilherme,

o problema de NullReference deve ser por conta das suas listas não estarem criadas, estarem todas nulas. Por boa prática, sempre que for usar uma lista garanta que ela será instanciada.

Então por exemplo na classe Imoveis, cria um construtor para esta classe que instancia uma List de Cidadaos e atribui a property de Cidadao. A mesma coisa para as listas da classe Cidadaos.

Outra coisa, por que você faz este comando imo.Cidadao = cidadaos;? Como a variavel cidadaos está nula, o que vai acontecer é que o imo vai justamente perder tudo que foi adicionado no for.

Boa tarde Lucas,

Certo! vou testar essas alterações, sobre o imo.Cidadao = cidadaos se tratava de uma tentativa frustrada de resolver o problema que eu me esqueci de tirar do código hahaha Desde já agradeço!

Funcionou Lucas! Muito obrigado!

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