UM PARA UM EF6

CLEVERTON 13/12/2017 15:29:37
#478420
Pessoal, eu não consigo colocar pra minha classe Pedido para carregar a Pessoa

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?
CLEVERTON 13/12/2017 17:35:24
#478421
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 ?






CLEVERTON 13/12/2017 17:40:33
#478423
Mas cara, pq se eu der um _contexto.Pessoas.ToList(); ele carrega a pessoa ?
JABA 13/12/2017 17:47:16
#478424
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?
CLEVERTON 13/12/2017 17:57:58
#478425
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
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();
CLEVERTON 13/12/2017 18:01:22
#478426
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.
JABA 13/12/2017 18:48:54
#478427
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; }
}

CLEVERTON 13/12/2017 18:58:46
#478428
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

CLEVERTON 13/12/2017 19:33:33
#478430
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