Entity Framework Eager Загрузка не загружает все данные - PullRequest
0 голосов
/ 22 октября 2019

Используя Entity Framework 6, я пытаюсь загрузить многообещающий граф объектов с помощью активной загрузки.

Каждый Продукт имеет коллекцию ProductDefinitions, каждый ProductDefinition имеет коллекцию документов, и каждый документ имеетDocumentDetail. Для целей приложения мне нужно загрузить все данные на этом этапе.

using (DatabaseEntities db = new DatabaseEntities())
{
    products = (from p in db.Products select p)
        .Include(p => p.ProductDefinition)
        .Include(p => p.ProductDefinition.Select(y=>y.ProductDocument))
        .Include(p => p.ProductDefinition.Select(y => y.ProductDocument.Select(o=>o.DocumentDetail)))                        
        .ToList();
}

После того, как продукты были получены, я могу использовать окно немедленного отладчика для проверки конкретного продукта.

var productOfInterest = products.Single(p=>p.ProductIndex == "123456");

Просматривая окно «Местные жители», я вижу, что с продуктом связано 129 документов. Тем не менее, отсутствует одна запись.

Я могу добавить еще один запрос, связанный с интересующим продуктом, после первоначального запроса продукта:

using (DatabaseEntities db = new DatabaseEntities())
{
    products = (from p in db.Products select p)
        .Include(p => p.ProductDefinition)
        .Include(p => p.ProductDefinition.Select(y=>y.ProductDocument))
        .Include(p => p.ProductDefinition.Select(y => y.ProductDocument.Select(o=>o.DocumentDetail)))                        
        .ToList();

     var docs = (from d in db.ProductDocument
                where d.ProductDefinitionID == 1092
                select d).ToList();

Затем выполнить ту же команду Immediate Window:

var productOfInterest = products.Single(p=>p.ProductIndex == "123456");

Но теперь, изучив Продукт через окно «Местные жители», я обнаружил 130 документов.

Я озадачен тем, почему энергичная загрузка не уловила этот документ без второго запроса, а также почему второй запрос вообще изменил результаты.

РЕДАКТИРОВАТЬ:
Проходя по коду с обоими запросами, как только переменные продукты были установлены, я могу посмотреть и просмотреть 129 пунктов. Переходя к следующему запросу, значение в товарах обновляется до 130 позиций.

Я не думал, что элементы могут быть изменены после выполнения запроса с помощью вызова .ToList (). Что я скучаю?

...