Code First и загрузка данных - PullRequest
0 голосов
/ 17 марта 2012

Я должен сначала сделать выбор между кодом EF или моделью.

Я не уверен, что является лучшим решением для обеспечения эффективности разработки и самым простым решением для интеграции инфраструктуры IoC.

Сначала я попытался начать с кода, но не смог сделать свойства навигации для использования в качестве IQueryable. Когда я объявляю свойства навигации, я использую ICollection, например:

public class Invoice {
...
   public ICollection<LineItem> LineItems { get; set; }
...
}

и

public class LineItem {
...
   public Invoice Invoice { get; set; }
...
}

Когда я загружаю Invoice, моя коллекция LineItems пуста из-за отложенной загрузки.

Но когда я загружаю это свойство из базы данных, загружу ли я все LineItems этого счета-фактуры из базы данных, прежде чем я смогу использовать эту коллекцию как IQueryable?

Моя идея состоит в том, чтобы использовать IQueryable, чтобы сделать загрузку базы данных минимально возможной для повышения производительности.

Что я делаю не так? Какова лучшая практика?

Когда я впервые использую базу данных, я могу использовать свои свойства навигации как IQueryable из коробки без написания прокси-классов или оболочек.

Спасибо

Ответы [ 2 ]

0 голосов
/ 17 марта 2012

Вам нужно Virtual Ключевое слово, чтобы Lazyloading работал.

0 голосов
/ 17 марта 2012

Вам необходимо сделать все свойства вашей сущности виртуальными.Это позволяет EF генерировать прокси-класс для вашей сущности, так что вы можете запросить его.

public class Invoice {
     public virtual ICollection<LineItem> LineItems { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...