UM PARA UM EF6
Pessoal, eu não consigo colocar pra minha classe Pedido para carregar a Pessoa
Fica me retornando esse erro
Eu só quero fazer um relacionamento de um-para-um, mas o entity só gera um atributo ICollection em Pessoa, mas o que eu preciso é que me retorne a pessoa do pedido. até porque a chave estrangeira é na tabela pedido. Alguém me dá uma luz?
public class Pessoa
{
[Key]
public int Id { get; set; }
public string Nome { get; set; }
}
public class Pedido
{
[Key]
public int Id { get; set; }
//ForeingKey
public int IdPessoaDestina { get; set; }
[ForeignKey([Ô]FK_Pedido_Pessoa[Ô])]
public virtual Pessoas PessoaDestina { get; set; }
}
Fica me retornando esse erro
Citação:{[Ô]The ForeignKeyAttribute on property [ô]PessoaDestina[ô] on type [ô]ModelsV2.Domain.Pedido[ô] is not valid. The foreign key name [ô]FK_PedidoCab_Pessoa[ô] was not found on the dependent type [ô]ModelsV2.Domain.Pedido[ô]. The Name value should be a comma separated list of foreign key property names.[Ô]}
Eu só quero fazer um relacionamento de um-para-um, mas o entity só gera um atributo ICollection em Pessoa, mas o que eu preciso é que me retorne a pessoa do pedido. até porque a chave estrangeira é na tabela pedido. Alguém me dá uma luz?
Quando eu removo o atributo [ForeignKey([Ô]FK_Pedido_Pessoa[Ô])] e deixo mapeado pelo FluentApi surge outra situação.
o objeto Pedido.PessoaDestina vem NULL, mas se eu pesquisar outra coisa abaixo
Pedido cabResult = _contexto.Pedido.FirstOrDefault(l => l.NumeroCupom == _numerocupom);
Pessoa cliente = _contexto.Pessoas.FirstOrDefault(l => l.Codigo == 11);
Depois disso, por algum milagre o atributo Pedido.PessoaDestina fica preenchido,
Mas se for pra preencher manual, qual a graça de usar EF ?
o objeto Pedido.PessoaDestina vem NULL, mas se eu pesquisar outra coisa abaixo
Pedido cabResult = _contexto.Pedido.FirstOrDefault(l => l.NumeroCupom == _numerocupom);
Pessoa cliente = _contexto.Pessoas.FirstOrDefault(l => l.Codigo == 11);
Depois disso, por algum milagre o atributo Pedido.PessoaDestina fica preenchido,
Mas se for pra preencher manual, qual a graça de usar EF ?
Mas cara, pq se eu der um _contexto.Pessoas.ToList(); ele carrega a pessoa ?
Citação:Mas cara, pq se eu der um _contexto.Pessoas.ToList(); ele carrega a pessoa ?
Como assim? Ele carrega uma coleção de pessoas, é isso que você quis dizer?
Eu tenho a classe Pedido e Pessoa
dentro da Classe Pedido eu GRAVO o id da Pessoa no campo IdPessoaDestina
Só que quando vou recuperar o PEDIDO, a pessoa que está dentro dele, está NULL
Mas eu eu executar umas dessas linhas de código antes de tentar recuperar o pedido, a pessoa vem preenchida dentro do pedido.
ou
dentro da Classe Pedido eu GRAVO o id da Pessoa no campo IdPessoaDestina
Só que quando vou recuperar o PEDIDO, a pessoa que está dentro dele, está NULL
Pedido cabResult = _contexto.Pedido.FirstOrDefault(l => l.NumeroCupom == _numerocupom);
Mas eu eu executar umas dessas linhas de código antes de tentar recuperar o pedido, a pessoa vem preenchida dentro do pedido.
Pessoa cliente = _contexto.Pessoas.FirstOrDefault(l => l.Codigo == 11);
ou
_contexto.Pessoas.ToList();
Eu acredito que seja alguma coisa relacionada ao Lazy, mas já tentei de tudo.
Só mais um detalhe, isso só acontece quando é uma relação 1-1,
Em relações 1-N não tenho esse problema.
Só mais um detalhe, isso só acontece quando é uma relação 1-1,
Em relações 1-N não tenho esse problema.
Citação:public virtual Pessoas PessoaDestina { get; set; }
Encontrei um errinho aqui, mas não sei se tem a ver. Você colocou [Ô]Pessoas[Ô] no plural. Tem que apontar diretamente para a classe Pessoa.
Faça um teste assim, mudando a chave estrangeira de lugar:
public class Pessoa
{
[Key]
public int Id { get; set; }
public string Nome { get; set; }
}
public class Pedido
{
[Key]
public int Id { get; set; }
[ForeignKey([Ô]Pessoa[Ô])]
public int IdPessoaDestina { get; set; }
public virtual Pessoa PessoaDestina { get; set; }
}
Rapaz, miniaturizei o problema e obtive resposta.
Por algum motivo, mesmo consultando o registro ele não traz a informação completa, mas se eu fechar e abrir o programa, eu consigo capturar todos as subclasses de forma integral.
vou deixar um exemplo pra vc testar.
o Script do banco de dados está na pasta Models
Por algum motivo, mesmo consultando o registro ele não traz a informação completa, mas se eu fechar e abrir o programa, eu consigo capturar todos as subclasses de forma integral.
vou deixar um exemplo pra vc testar.
o Script do banco de dados está na pasta Models
Dessa forma aqui eu consigo recuperar o registro de forma completa.
using (myContextDomain _contexto = new myContextDomain())
{
_contexto.Pedidos.Add(pedido);
_contexto.SaveChanges();
}
myContextDomain _contexto2 = new myContextDomain();
Pedido pedResult = _contexto2.Pedidos.FirstOrDefault(l => l.NumeroCupom == numerocupom);
Tópico encerrado , respostas não são mais permitidas