Usuário com melhor resposta
Erro ao instanciar uma classe

Pergunta
-
Bom dia Galera !
Estou com dificuldade num algoritmo que estou implementando de cadastro onde tenho as seguinte estrutura:
public void Inserir (Filial_Empresa_REL fili_rel) { var strQuery = ""; strQuery += "INSERT INTO EMPRESA (EMPR_CODIGO,EMPR_NOME,EMPR_RAZAOSOCIAL,EMPR_CNPJ,EMPR_INSCRICAOESTADUAL,EMPR_ENDERECO,EMPR_TELEFONE,EMPR_SITE,EMPR_TIPO)"; strQuery += string.Format("VALUES ('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')", fili_rel.empresa.EMPR_CODIGO,fili_rel.empresa.EMPR_NOME,fili_rel.empresa.EMPR_RAZAOSOCIAL,fili_rel.empresa.EMPR_CNPJ, fili_rel.empresa.EMPR_INSCRICAOESTADUAL,fili_rel.empresa.EMPR_ENDERECO,fili_rel.empresa.EMPR_TELEFONE,fili_rel.empresa.EMPR_SITE,2); using (contexto = new Contexto()) { contexto.ExecutaComando(strQuery); } BuscaID(fili_rel); strQuery = ""; strQuery += "INSERT INTO PROPRIETARIA_FILIAL(EMPR_ID,PROP_ID)"; strQuery += string.Format("VALUES('{0}','{1}')", fili_rel.filial.EMPR_ID, fili_rel.filial.PROP_ID); } public Filial_Empresa_REL BuscaID(Filial_Empresa_REL fili_rel) { using (contexto = new Contexto()) { var strQuery = ""; strQuery += "SELECT EMPR_ID FROM EMPRESA WHERE EMPR_TIPO='2'"; strQuery += string.Format("AND EMPR_CODIGO = '{0}'", fili_rel.empresa.EMPR_CODIGO); var strQuery2 = ""; strQuery2 += "SELECT PROP_ID FROM PROPRIETARIA"; var retornoEscalarIdEmp = Convert.ToInt32(contexto.ExecutaComandoScalar(strQuery)); var retornoEscalarIdProp = Convert.ToInt32(contexto.ExecutaComandoScalar(strQuery2)); fili_rel.filial.EMPR_ID = retornoEscalarIdEmp; fili_rel.filial.PROP_ID = retornoEscalarIdProp; return fili_rel; }
O erro que aparece é Object reference not set to an instance of an object, e aparece quando chega na parte em negrito, ao passar o valor da variavel que foi buscar no banco para a classe, sou novato nessa parte e não estou conseguindo identificar a causa do erro.
Obrigado.
- Editado Diego Bexa segunda-feira, 23 de junho de 2014 13:24
Respostas
-
Então você pode usar direto essa classe Proprietaria_Filial, ao invés de usar a Filial_Empresa_REL:
public class Proprietaria_Filial { public int IdEmpresa { get; set; } public Empresa empresa { get; set; } public int IdProprietaria { get; set; } public Proprietaria proprietaria { get; set; } }
E aí você poderia também colocar no "Get" da empresa e proprietária, um código que pesquise os dados sobre a empresa e proprietária de acordo com os valores que estão nos campos de ID, como por exemplo:
public Proprietaria proprietaria { get { return Proprietaria.Buscar(this.IdProprietaria); } }
- Marcado como Resposta Diego Bexa segunda-feira, 23 de junho de 2014 14:31
Todas as Respostas
-
Bom dia Diego,
Talvez o erro aconteça porque o atributo "filial" do objeto "fili_rel" não esteja instanciado.
Tente antes de setar essas propriedades, inserir esse código:
fili_rel.filial = new Filial(); //coloque o nome da classe do atributo "filial"
-
Ok, deu certo só que estou usando a seguinte estrutura e estou com algumas duvidas:
Tenho uma classe para acessar as outras classes que são relacionadas. EX:
public class Filial_Empresa_REL { public Proprietaria_Filial filial { get; set; } public Empresa empresa { get; set; } public Proprietaria proprietaria { get; set; } }
Essa classe tem acesso a classe empresa, proprietaria e filial.
Essa estrutura para se trabalhar com classes relacionais é a melhor forma, ou há outras formas mais adequadas ?
Obrigado
-
Bom, aí depende muito da sua regra de negócio, que determina qual classe deve ser filha de uma outra, ou quais são os relacionamentos de herança entre elas.
Para eu entender direito, a classe Proprietaria_Filial possui o código da Empresa e da Proprietária certo?
Nesse caso, para que você precisa da classe Filial_Empresa_REL? A classe Proprietaria_Filial já seria sua classe relacional, não seria?
-
Sim, realmente seria só que estou utilizando uma view tipada e preciso alimentar mais de uma tabela com os dados e para facilitar estava usando essa estrutura, há outra maneira ?
- Editado Diego Bexa segunda-feira, 23 de junho de 2014 14:21
-
Então você pode usar direto essa classe Proprietaria_Filial, ao invés de usar a Filial_Empresa_REL:
public class Proprietaria_Filial { public int IdEmpresa { get; set; } public Empresa empresa { get; set; } public int IdProprietaria { get; set; } public Proprietaria proprietaria { get; set; } }
E aí você poderia também colocar no "Get" da empresa e proprietária, um código que pesquise os dados sobre a empresa e proprietária de acordo com os valores que estão nos campos de ID, como por exemplo:
public Proprietaria proprietaria { get { return Proprietaria.Buscar(this.IdProprietaria); } }
- Marcado como Resposta Diego Bexa segunda-feira, 23 de junho de 2014 14:31
-
-