Ведение журнала Entity Framework Core - не вижу, как сгенерированный запрос возвращает мои данныеC#

Место общения программистов C#
Anonymous
Ведение журнала Entity Framework Core - не вижу, как сгенерированный запрос возвращает мои данные

Сообщение Anonymous »

Мое простое тестовое приложение, которое я настроил для диагностики другой возникшей у меня проблемы, похоже, извлекает связанные данные из таблицы, которую я не ожидал, и когда я включаю ведение журнала, я не вижу ссылки на эту таблицу в сгенерированном SQL.
Мое тестовое приложение имеет две простые сущности — Band, каждая из которых может иметь множество альбомов. После настройки некоторых тестовых данных я запускаю запрос, чтобы вернуть одну из групп, и, похоже, она возвращается вместе со связанными с ней альбомами, хотя я их не запрашивал и не вижу никакой ссылки на Таблица альбома в сгенерированном SQL, зарегистрированном Entity Framework.
Субъекты выглядят следующим образом.

Код: Выделить всё

public class Band
{
public Guid Id { get; set; }
public string BandName { get; set; }
public List Albums { get; set; } = [];
}

public class Album
{
public Guid Id { get; set; }
public string AlbumName { get; set; }
public Guid BandId { get; set; }
public Band Band { get; set; }
}
Я настраиваю ведение журнала следующим образом, в методе OnConfiguring: -

Код: Выделить всё

optionsBuilder.LogTo(Console.WriteLine);
optionsBuilder.EnableSensitiveDataLogging();
После настройки набора тестовых данных (которые я не буду вставлять сюда для краткости) я запускаю следующий простой тестовый код: -

Код: Выделить всё

Band band = context.Bands.Where(b => b.BandName == "The Cure").Single();
List albums = band.Albums;
Console.WriteLine($"{band.BandName} has released {albums.Count} albums: -");
foreach (Album album in band.Albums)
{
Console.WriteLine(album.AlbumName);
}
На самом деле я ожидал, что моя коллекция альбомов будет пустой, поскольку я не добавил Include в свой первоначальный оператор LINQ. Но коллекция альбомов полностью заполнена, поэтому в коде перечислены альбомы этой группы. Это справедливо, но, глядя на сгенерированный оператор SQL из журнала, я не вижу ничего, что каким-либо образом ссылается на таблицу «Альбомы». Вот общая сумма SQL, которая отображается в журнале: -

Код: Выделить всё

SELECT "b"."Id", "b"."BandName"
FROM "Bands" AS "b"
WHERE "b"."BandName" = 'The Cure'
LIMIT 2
Кстати, если я добавлю оператор включения, то сгенерированный SQL ссылается на таблицу «Альбомы», как я и ожидал, а остальная часть кода выполняется точно таким же образом, создавая тот же результат.
Может ли кто-нибудь предложить помощь в разгадке этой загадки?

Подробнее здесь: https://stackoverflow.com/questions/790 ... ringing-ba

Вернуться в «C#»