2013-02-19 3 views
2

Какова цель public virtual ICollection<Product> Products { get; set; } в классе POCO?Какова цель ICollection в классе POCO (EF)?

public class Category 
    { 
     [ScaffoldColumn(false)] 
     public int CategoryID { get; set; } 

     [Required, StringLength(100), Display(Name = "Name")] 
     public string CategoryName { get; set; } 

     public virtual ICollection<Product> Products { get; set; } 


    } 

ответ

5

Products связана с Category будет ленивым загружен Entity Framework, когда свойство доступа в первый раз.

Как вы можете загрузить связанные объекты объясняются более подробно в Loading Related Entities:

Ленивая нагрузка представляет собой процесс, посредством которого лицо или совокупность лиц, автоматически загружается из базы данных в первый раз, что свойство со ссылкой на доступ к объекту/объектам. При использовании типов сущностей POCO, ленивая загрузка достигается путем создания экземпляров производных прокси-типов, а затем переопределения виртуальных свойств для добавления загрузочного крючка.

Так Entity Framework будет выводить прокси-класс от Category класса и переопределить геттер в Products собственности, чтобы загрузить соответствующие продукты в первый раз свойство доступ.

+0

Хорошо, я пропустил теги EF и не думал об этом. – slugster

+0

Считается ли это эффективным/правильным? Думаю, я хочу сказать, что я пытаюсь найти эффективные способы использования этого, но не так, если это считается хорошей практикой? – jackncoke

+1

Вот как вы делаете ленивую загрузку связанных объектов в Entity Framework. Если вы не хотите делать ленивую загрузку (возможно, по соображениям производительности или просто потому, что вам не нравится концепция), вы должны использовать нетерпеливую или явную загрузку. Более подробная информация содержится в связанной документации. –

Смежные вопросы