Array
(
)

Só para saber qual melhor forma com FK e classes POCO

Pjava
   - 26 ago 2013

Quando eu uso uma FK com EF em uma classe POCO, normalmente eu faço assim:
public virtual Classe_Entidade nome(que sempre ponho o nome da classe entidade), assim:
public virtual Endereco Endereco {get; set; }
Mas já casos que se coloca um atributo do tipo Foreign Key e o usual assim:
[Foreign Key]
public int Meu_Campo_Estrangeiro { get; set; }
A pergunta é: Há diferença entre uma forma e outra, ou seja, melhor performance e etc ou não, ambas dão o mesmo resultado esperado.

Joel Rodrigues
   - 27 ago 2013

Se analisarmos, veremos que ambas as formas possuem seus pontos positivos e negativos. Por exemplo:
Usando a primeira forma:
(-) Ao carregar um objeto, essa propriedade complexa que também é um objeto será carregada. Assim, isso tende a consumir mais recursos (óbvio);
(+) Se você tem essa propriedade complexa (chave estrangeira), certamente vai precisar dos detalhes dela em algum momento. Aí você já teria todas as informações armazenadas em um objeto interno ao objeto principal (as informações do Endereco, por exemplo, aí você poderia facilmente usar obj.Endereco.Rua, etc).

Usando a segunda forma:
(+) Ao carregar um objeto, apenas um campo simples será carregado (um int, por exemplo), o que tende a ser mais rápido.
(-) Quando você precisar dos detalhes da chave estrangeira (Rua, Bairro, etc), você terá que localizar esses detalhes em outra tabela. Para isso, terá de fazer algum tipo de filtro (Find, Where, etc), instanciar um objeto e ler suas propriedades.

Na prática, porém, a diferença de desempenho pode ser muito pouca, mas em termos de praticidade e de organização, a primeira forma é mais adequada.