EF4 Code-First: включать или не включать иностранные ключи в модель при создании ассоциации - PullRequest
3 голосов
/ 05 декабря 2010

В некоторых обходах Code-First EF4 вы видите такую ​​схему при определении POCO:

public class Product
{
    public int ID { get; set; }

    public int ManufacturerId { get; set; }
    public virtual Manufacturer Manufacturer { get; set; }
}

Почему у продукта должен быть и идентификатор производителя, и ссылка на производителя? Это как-то связано с отложенной загрузкой?

1 Ответ

2 голосов
/ 05 декабря 2010

Это действительно возвращает нас к истории Entity Framework: в EF1 у нас было только Независимая ассоциация , означающая, что FK (например, ManufacturerId) не были выставлены на зависимый объект (например, Product), и вы работаете только свойство навигации (например, Производитель). В EF4 введен новый тип ассоциации: Ассоциация внешнего ключа , где в модели всплыли FK, и вы можете напрямую с ними работать.

Таким образом, приведенная ниже модель по-прежнему является вполне допустимой, но она в стиле EF1 (т.е. Независимая ассоциация):

public class Product {
    public int ID { get; set; }
    public virtual Manufacturer Manufacturer { get; set; }
}

При этом рекомендуется всегда включать внешние ключи в объекты, поскольку это дает вам максимальную гибкость для работы с вашей объектной моделью:

public class Product {
    public int ID { get; set; }
    public int ManufacturerId { get; set; }
    public virtual Manufacturer Manufacturer { get; set; }
}

Интересным моментом является то, что по соглашению , код EF сначала распознает ManufacturerId как FK для Manufacturer свойства навигации и создаст связь на основе этого в базе данных.

Кстати, это не имеет ничего общего с отложенной загрузкой, отложенная загрузка будет работать с FK или без них, если вы отметите свойство навигации как vitual , как вы делали в своей модели.

...