Fórum Herança EDM #3575
12/03/2009
Pessoal estou com uma duvida para inserir registro em uma estrutura com herança veja como esta minha estrutura no EDM:
Meu banco de dados esta assim:
Entidade: Pessoa
IdPessoa int
Nome varchar(50)
Entidade: PessoaFisica
IdPessoa int
CPF varchar(15)
Entidade: PessoaJuridica
IdPessoa int
CNPJ varchar(20)
Entidade: Cliente
IdPessoa int
Observacao text
Entidade: Fornecedor
IdPessoa int
NomeFantasia varchar(50)
Para inserir um novo cliente do tipo pessoa fisica por exemplo estou usando o código abaixo:
Model.ModelContainer db = new Model.ModelContainer();
Model.Cliente cliente = new Model.Cliente();
cliente.IdPessoa = 1;
cliente.Nome = "Jose";
cliente.Observacao = "teste";
db.AddtoPessoa(cliente);
Model.PessoaFisica pessoa = new Model.PessoaFisica();
pessoa.IdPessoa = 1;
pessoa.CPF = "1111111111";
db.AddToPessoa(pessoa);
db.SaveChanges();
Porém esse codigo da erro, ele executa a primeira parte que adiciona o cliente mas quando adiciona a pessoa fisica ele da erro, porque na verdade a pessoa já foi inserida, mas a tabela herdada pessoa fisica não. O que posso fazer para resolver esse problema??
Aguardo uma resposta o mais breve possivel
Julio
Nefrodata Sistemas
Posts
12/03/2009
[devmedia .net]
Opa tudo bem ?
Bom seu código está errado no momente que se adiciona a pessoa física
Model.PessoaFisica pessoa = new Model.PessoaFisica();
pessoa.IdPessoa = 1;
pessoa.CPF = "1111111111";
db.AddToPessoa(pessoa); ---->>> Esse linha deveria ser db.AddToPessoFisica(pessoa);
Altere e vai funcionar...
Abraços
Carlos Jr
12/03/2009
Nefrodata Ltda
Carlos não existe metodo AddToPessoaFisica a classe pessoafisica herda da classe pessoa não tem esse método implementado para a classe.
12/03/2009
[devmedia .net]
Opa, na verdade te expliquei errado...
Model.PessoaFisica pessoa = new Model.PessoaFisica();
pessoa.IdPessoa = 1; --->>> Erro : Você não tem IdPessoa na entidade PessoaFisica
pessoa.CPF = "1111111111";
db.AddToPessoa(pessoa);
Tente utilizar da seguinte maneira...
Model.Pessoa pessoa = new Model.Pessoa();
pessoa.IdPessoa = 1;
pessoa.Nome = "Jose";
pessoa.Cliente.Observacao = "teste";
pessoa.PessoaFisica.CPF = "1111111111";
db.AddtoPessoa(pessoa);
Pode ser que funcione...
O Entity Frameowork, é um modelo de dados ainda em teste cara,
ele tem vários problemas que ninguém ainda conseguiu resolver,
nem mesmo o fabricante, portanto lhe aconselho a não usar Heranças no Entity Framework.
Aguardo retorno.
Abraços
Carlos Jr
12/03/2009
Nefrodata Ltda
Carlos desse jeito também não funciona como a classe cliente e pessoafisica herda da classe pessoa não existe navegabilidade da maneira que vc passou. Mas consegui resolver de outra maneira. Juntei as classes pessoa, pessoafisica e pessoajuridica numa unica classe e acrescentei um atributo tipopessoa que define qual o tipo de pessoa.
Mesmo assim valeu pela dica.
Abraços
Júlio
12/03/2009
[devmedia .net]
Olá, que bom que resolveu.
Como lhe disse, o Entity Framework não funciona direito ainda, isso funciona no LINQ com certeza,
que também não é um boa solução.
Abraços
Carlos Jr