Code primero: ¿asociaciones independientes vs. asociaciones de claves extranjeras?
Tengo un debate mental conmigo mismo cada vez que comienzo a trabajar en un nuevo proyecto y estoy diseñando mis POCO. He visto muchos tutoriales / ejemplos de código que parecen favorecer a asociaciones de claves extranjeras:
Asociación de claves extranjeraspublic class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
Opuesto a asociaciones independientes:
Asociación independientepublic class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
He trabajado con NHibernate en el pasado, y he usado asociaciones independientes, que no solo se sienten más OO, sino que también (con carga lenta) tienen la ventaja de darme acceso a todo el objeto Cliente, en lugar de solo su ID. Esto me permite, por ejemplo, recuperar una instancia de Order y luego hacerOrder.Customer.FirstName
sin tener que hacer una unión explícitamente, lo cual es extremadamente conveniente.
ara resumir, mis preguntas son:
¿Existen desventajas significativas en el uso de asociaciones independientes? y.. Si no hay ninguno, ¿cuál sería la razón para usar asociaciones de claves externas?