DATAANNOTATIONS - FOREIGN KEY
Gente, estou com uma dúvida meio besta...
Tenho duas tabelas, que são chamadas [Ô]Unidades[Ô] e [Ô]Produtos[Ô]. A chave primária na tabela Unidades chama-se [Ô]UnidadeID[Ô].
A tabela Produtos precisa duas chaves estrangeiras, nomeadas como [Ô]UnidadeDeCompra[Ô] e [Ô]UnidadeDeVenda[Ô], ambas as colunas referenciando a tabela [Ô]Unidades[Ô].
No projeto há várias outras tabelas, claro, mas com todas as demais está tudo certo. Meu problema é apenas com a [Ô]Produtos[Ô].
Ocorre que eu preciso criar o código com [Ô]Entity Framework, Code First (Fluent API)[Ô] usando DataAnnotations, na linguagem VB.Net, mas especificamente para essa [Ô]dobradinha[Ô] de chaves externas, não tenho ideia de como fazer...
Se fosse uma coluna de chave externa apenas, ou várias para tabelas distintas, não seria problema, mas são duas para a mesma tabela e obrigatoriamente usando os nomes citados, que não correspondem ao nome do campo primário na tabela referenciada... E também não posso criar via manager ou EDMX, deve ser por meio da EF6, Code First mesmo.
Alguém poderia me ajudar nesse problema?
Tenho duas tabelas, que são chamadas [Ô]Unidades[Ô] e [Ô]Produtos[Ô]. A chave primária na tabela Unidades chama-se [Ô]UnidadeID[Ô].
A tabela Produtos precisa duas chaves estrangeiras, nomeadas como [Ô]UnidadeDeCompra[Ô] e [Ô]UnidadeDeVenda[Ô], ambas as colunas referenciando a tabela [Ô]Unidades[Ô].
No projeto há várias outras tabelas, claro, mas com todas as demais está tudo certo. Meu problema é apenas com a [Ô]Produtos[Ô].
Ocorre que eu preciso criar o código com [Ô]Entity Framework, Code First (Fluent API)[Ô] usando DataAnnotations, na linguagem VB.Net, mas especificamente para essa [Ô]dobradinha[Ô] de chaves externas, não tenho ideia de como fazer...
Se fosse uma coluna de chave externa apenas, ou várias para tabelas distintas, não seria problema, mas são duas para a mesma tabela e obrigatoriamente usando os nomes citados, que não correspondem ao nome do campo primário na tabela referenciada... E também não posso criar via manager ou EDMX, deve ser por meio da EF6, Code First mesmo.
Alguém poderia me ajudar nesse problema?
Simplesmente colocando as decorações nas propriedades respectivas não funciona?
[ForeignKey([Ô]UnidadeDeCompra[Ô])]
public virtual string Compra { get; set; }
[ForeignKey([Ô]UnidadeDeVenda[Ô])]
public virtual string Venda { get; set; }
}
Obrigado, KERPLUNK.
Esse é o meu problema. Não funciona (ou estou fazendo besteira, o que é mais provável).
Acusa uma mensagem dizendo que: [Ô]...Unidades->Unidades.UnidadeID column not found...[Ô]
Olhando a classe Unidade, lá está a propriedade UnidadeID. Essa propriedade não existe em [Ô]Produtos[Ô], onde estão definidas as propriedades [Ô]UnidadeDeCompraID[Ô] e [Ô]UnidadeDeVendaID[Ô], além, claro das propriedades [Ô]UnidadeDeCompra[Ô] e [Ô]UnidadeDeVenda[Ô].
Ou será que eu deveria não definir essas duas propriedades e deixar o Code First [Ô]se virar[Ô] para encontrá-las só pela anotação?
Esse é o meu problema. Não funciona (ou estou fazendo besteira, o que é mais provável).
Acusa uma mensagem dizendo que: [Ô]...Unidades->Unidades.UnidadeID column not found...[Ô]
Olhando a classe Unidade, lá está a propriedade UnidadeID. Essa propriedade não existe em [Ô]Produtos[Ô], onde estão definidas as propriedades [Ô]UnidadeDeCompraID[Ô] e [Ô]UnidadeDeVendaID[Ô], além, claro das propriedades [Ô]UnidadeDeCompra[Ô] e [Ô]UnidadeDeVenda[Ô].
Ou será que eu deveria não definir essas duas propriedades e deixar o Code First [Ô]se virar[Ô] para encontrá-las só pela anotação?
é que essas anotações deveriam ficar na classe de produtos e não na Unidade, pois é a propriedade de produto que se refere à unidade e não o oposto.
Não, se eu não definir as propriedades UnidadeDeCompraID e UnidadeDeVendaID, não dá certo mesmo, como eu esperava.
O problema é que eu teria de informar no DataAnnotations quais as colunas na tabela corrente e na tabela estrangeira, pois pelo visto, o Code First já está tentando localizer o UnidadeID, só não entendeu que em Produtos os nomes dos campos são diferentes.
é claro que eu devo estar fazendo algo bem errado. Mas sabe, na verdade, o que é esse problema? A pressa no desenho da estrutura de dados, difÃcil não aparecer falha de normatização. O certo seria manter mais uma tabela, bem pequenina, informando cada unidade em uma [Ô]linha[Ô] e se é compra ou venda. Mas a empresa já tem essa base há anos (não é meu, só estou fazendo um adendo á parte e usando a mesma base de dados) e não pode alterar nada agora.
De qualquer modo, agradeço novamente o esforço. Se [Ô]acender alguma lampadinha[Ô] aÃ, por favor, me avise, ok?
O problema é que eu teria de informar no DataAnnotations quais as colunas na tabela corrente e na tabela estrangeira, pois pelo visto, o Code First já está tentando localizer o UnidadeID, só não entendeu que em Produtos os nomes dos campos são diferentes.
é claro que eu devo estar fazendo algo bem errado. Mas sabe, na verdade, o que é esse problema? A pressa no desenho da estrutura de dados, difÃcil não aparecer falha de normatização. O certo seria manter mais uma tabela, bem pequenina, informando cada unidade em uma [Ô]linha[Ô] e se é compra ou venda. Mas a empresa já tem essa base há anos (não é meu, só estou fazendo um adendo á parte e usando a mesma base de dados) e não pode alterar nada agora.
De qualquer modo, agradeço novamente o esforço. Se [Ô]acender alguma lampadinha[Ô] aÃ, por favor, me avise, ok?
Achei a resposta.
Como eu já desconfiava, fiz besteira. Eu tinha esquecido completamente que existia o atibuto InverseProperty. Bastou completar o que faltava na definição da Unidade e tudo funcionou sem problemas.
Agora, cara, olha lá o que eu fui esquecer... Deve ser da idade, nem cabelo mais cresce nessa cabeça... Vou começar á comprar [Ô]Fosfosol[Ô].
Grato pela força, e desculpe pelo aborrecimento!
Como eu já desconfiava, fiz besteira. Eu tinha esquecido completamente que existia o atibuto InverseProperty. Bastou completar o que faltava na definição da Unidade e tudo funcionou sem problemas.
Agora, cara, olha lá o que eu fui esquecer... Deve ser da idade, nem cabelo mais cresce nessa cabeça... Vou começar á comprar [Ô]Fosfosol[Ô].
Grato pela força, e desculpe pelo aborrecimento!
Tópico encerrado , respostas não são mais permitidas