Dúvida na lógica de criação de atributo (C-Sharp)
Estou tentando me aprimorar em C#, especificamente no padrão MVC, criei um projeto de uma Loja Virtual mas estou com um problema:
Criei uma classe para controlar as vendas dessa loja virtual, em seguida uma FK que aponta diretamente para o cliente, mas na hora de selecionar os produtos não sei como declarar, considerando que uma venda pode ter infinitos produtos, segue um print de como ficou até agora:
Estou travado nessa parte faz um tempo, qualquer ajuda agradeço imensamente!
Criei uma classe para controlar as vendas dessa loja virtual, em seguida uma FK que aponta diretamente para o cliente, mas na hora de selecionar os produtos não sei como declarar, considerando que uma venda pode ter infinitos produtos, segue um print de como ficou até agora:
public class Venda
{
[Key]
public int VendaId { get; set; }
[Required]
public DateTime DiaVenda { get; set; }
[Required]
public DateTime MesVenda { get; set; }
[Required]
public DateTime AnoVenda { get; set; }
[Required]
public DateTime HoraVenda { get; set; }
[Required]
public DateTime DiaSemanaVenda { get; set; }
[ForeignKey("Pessoa")]
public Pessoa Pessoa { get; set; }
}Estou travado nessa parte faz um tempo, qualquer ajuda agradeço imensamente!
Gabriel Moreira
Curtidas 0
Melhor post
Luis Mesa
13/03/2017
Opa Gabriel, tudo tranquilo por aí?
Então, para isso você tem algumas opções! :)
Pessoa, nesse caso, é uma variável de navegação. Ou seja, você ainda precisará criar uma variável, na sua classe Venda, que representa a Chave Estrangeira referente a Classe Pessoa. A seguir coloco algumas formas de solucionar esse problema:
ou
ou
Por convenção, se considera que a Chave Estrangeira terá mesmo nome da Chave Primária da tabela de onde se referencie, considerando que na classe Pessoa a Chave Primária seja PessoaId. Ainda que o nome da Chave Primária da classe Pessoa seja somente Id, usando esse padrão Pessoa como nome para a variável de navegação e PessoaId para a Chave Estrangeira deverá funcionar ao gerar o Banco de Dados com Entity Framework. :)
Quaisquer dúvidas, só responder por aqui!
Abraço
Então, para isso você tem algumas opções! :)
Pessoa, nesse caso, é uma variável de navegação. Ou seja, você ainda precisará criar uma variável, na sua classe Venda, que representa a Chave Estrangeira referente a Classe Pessoa. A seguir coloco algumas formas de solucionar esse problema:
[ForeignKey("Pessoa")]
public int PessoaRefId { get; get; }
public Pessoa Pessoa { get; set; }ou
public int PessoaRefId { get; get; }
[ForeignKey("PessoaRefid")]
public Pessoa Pessoa { get; set; }ou
public int PessoaId { get; get; }
public Pessoa Pessoa { get; set; }Por convenção, se considera que a Chave Estrangeira terá mesmo nome da Chave Primária da tabela de onde se referencie, considerando que na classe Pessoa a Chave Primária seja PessoaId. Ainda que o nome da Chave Primária da classe Pessoa seja somente Id, usando esse padrão Pessoa como nome para a variável de navegação e PessoaId para a Chave Estrangeira deverá funcionar ao gerar o Banco de Dados com Entity Framework. :)
Quaisquer dúvidas, só responder por aqui!
Abraço
GOSTEI 1
Mais Respostas
Gabriel Moreira
12/03/2017
Luis, boa noite.
O terceiro exemplo me pareceu mais adequado, nesse caso não exige colocar a especificação [ForeignKey()] ?
Obrigado!
O terceiro exemplo me pareceu mais adequado, nesse caso não exige colocar a especificação [ForeignKey()] ?
Obrigado!
GOSTEI 0
Luis Mesa
12/03/2017
Bom dia, Gabriel.
Por convenção, é possível usar o nome do campo de navegação Pessoa e a Chave Estrangeira PessoaId e será associado, por padrão. Se na classe Pessoa a Chave Primária é PessoaId, da mesma forma seria associado.
Um abraço!
Por convenção, é possível usar o nome do campo de navegação Pessoa e a Chave Estrangeira PessoaId e será associado, por padrão. Se na classe Pessoa a Chave Primária é PessoaId, da mesma forma seria associado.
Um abraço!
GOSTEI 0
Luis Mesa
12/03/2017
E não, não é necessário adicionar a Anotação [ForeignKey()], por usar dessa convenção para definir a Chave Estrangeira.
GOSTEI 0