UM PARA UM EF6

 Tópico anterior Próximo tópico Novo tópico

UM PARA UM EF6

C#

 Compartilhe  Compartilhe  Compartilhe
#478420 - 13/12/2017 15:29:37

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
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?



#478421 - 13/12/2017 17:35:24

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
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 ?










#478422 - 13/12/2017 17:39:22

JABA
CABO FRIO
Cadast. em:Agosto/2005


Só seguir o padrão.

www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx

_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#478423 - 13/12/2017 17:40:33

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe
Mas cara, pq se eu der um  _contexto.Pessoas.ToList(); ele carrega a pessoa ?



#478424 - 13/12/2017 17:47:16

JABA
CABO FRIO
Cadast. em:Agosto/2005


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?

_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#478425 - 13/12/2017 17:57:58

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 13/12/2017 17:58:32 por CLEVERTON

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();




#478426 - 13/12/2017 18:01:22

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 13/12/2017 18:02:33 por CLEVERTON

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.




#478427 - 13/12/2017 18:48:54

JABA
CABO FRIO
Cadast. em:Agosto/2005


Última edição em 13/12/2017 18:55:20 por JABA

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; }
}



_______________________________________________________________________________________________

Se a alma ou espírito são imateriais, como eles fazem para se localizarem quando o corpo está em movimento?



#478428 - 13/12/2017 18:58:46

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

 Anexos estao visíveis somente para usuários registrados

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





#478430 - 13/12/2017 19:33:33

CLEVERTON
SERRINHA
Cadast. em:Dezembro/2003


Membro da equipe

Última edição em 13/12/2017 19:35:11 por CLEVERTON

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 anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por CLEVERTON em 13/12/2017 23:11:00