DATAANNOTATIONS - FOREIGN KEY

PROFESSOR 08/01/2014 10:07:42
#432786
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?
KERPLUNK 08/01/2014 10:52:03
#432791
Resposta escolhida
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; }
}
PROFESSOR 08/01/2014 11:39:23
#432796
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?
KERPLUNK 08/01/2014 11:49:52
#432799
é 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.
PROFESSOR 08/01/2014 11:57:05
#432800
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?
PROFESSOR 08/01/2014 12:14:33
#432803
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!
Tópico encerrado , respostas não são mais permitidas