Навигационное свойство не материализовано в синтаксисе запросов Linq, также отложенная загрузка не работает

Ниже приведено соединение с использованием linq:

var query = from a in TableA
            join b in TableB
            on new { a.Id1, a.Id2 } equals new { b.Id1, b.Id2 }
            select a;
var entities = query.ToList();
foreach(var item in entities)
{
    foreach(var b in item.B)
    {
        var propValue = b.SomeProperty;
    }
}

Предположим, что в TableB есть соответствующие записи для элементов в TableA. Но после выполнения запроса в навигационном свойстве B каждого A. не было значения.

Также, когда я пытаюсь получить доступ к нему во внутреннем цикле foreach, он не отправляет запрос в БД для загрузки этих объектов (отложенная загрузка).

Я что-то упускаю или это так, как должна работать структура сущностей.

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

Есть ли способ материализации этих навигационных свойств при использовании синтаксиса запросов LINQ без потери возможности писать чистый SQL-запрос без вложенных запросов.

1 ответ

Решение

Вы не должны присоединяться к LINQ to Entities. Вместо этого используйте ваши свойства навигации.

var query = from a in TableA.Include(a => a.B)
            select a;
Другие вопросы по тегам