Я мысленно спорим с собой каждый раз, когда начинаю работать над новым проектом и разрабатываю свои POCO. Я видел много руководств / примеров кода, которые, кажется, отдают предпочтение ассоциациям внешних ключей :
Ассоциация внешнего ключа
public class Order
{
public int ID { get; set; }
public int CustomerID { get; set; } // <-- Customer ID
...
}
В отличие от независимых ассоциаций :
Независимая ассоциация
public class Order
{
public int ID { get; set; }
public Customer Customer { get; set; } // <-- Customer object
...
}
Я работал с NHibernate в прошлом и использовал независимые ассоциации, которые не только ощущаются более объектно ориентированными, но также (с отложенной загрузкой) имеют то преимущество, что дают мне доступ ко всему объекту Customer, а не только к его идентификатору. Это позволяет мне, например, получить экземпляр Order, а затем обойтись Order.Customer.FirstName
без явного соединения, что чрезвычайно удобно.
Итак, мои вопросы таковы:
- Есть ли существенные недостатки в использовании независимых ассоциаций? и...
- Если их нет, зачем вообще использовать ассоциации внешнего ключа?