Ядро инфраструктуры сущностей не включает ToListAsync, но работает с FirstOrDefaultAsync - PullRequest
1 голос
/ 07 ноября 2019

У меня есть запрос, который выглядит следующим образом (ядро Entity Framework 2.2.7):

        var query = from row in _entities.MyEntities
                .Include(e => e.MyEntityChildren)
                .Include(e => e.MyParent)
                .Include(e => e.MyParent2)
                .Include(e => e.MyParent3)
                .Include(e => e.MyParent4)
            where row.MyParent4.Id == "whatever" &&
                  dict.Contains(row.Id) &&
                  active.Contains(row.Status)
            select row;

Тогда у меня разные результаты в зависимости от того, как я выполняю запрос:

var e = await query.FirstOrDefaultAsync();

Работает правильно

var e = await query.Distinct().ToListAsync();

Не заполняет MyParent3. Но оба запроса включают все остальные отношения.

Так что мой вопрос. Это известная проблема? В чем разница между первым и списком? И знает ли что-нибудь, как ее решить?

Сгенерированный sql выглядит одинаково, и MyParent3 выбирается из базы данных в обоих случаях, поэтому я подозреваю, что это что-то с сериализатором. Это работало в ядре платформы сущностей 2.0.9

РЕДАКТИРОВАТЬ: забыл отличить!

Ответы [ 2 ]

1 голос
/ 07 ноября 2019

Разница между первым и списком, предполагающим данные (2, 3, 4, 1) из вашего запроса:
- Списки похожи на массив, который содержит более 1 элемента, который будет получен ([2, 3, 4, 1])
- Первый содержит только 1 элемент, который является первым элементом (2)

Что касается того, почему он не работает, мое лучшее предположение:
1. Формат данных, полученных по вашему запросу, не может сериализоваться в список, поэтому там нет выходных данных.
2. В вашем первом примере тоже нет фактических данных, чтовернет элемент по умолчанию

0 голосов
/ 07 ноября 2019

Я понятия не имею, почему это происходит, и также не хочу публиковать весь проект, потому что MyEntity - это, например, Orders, а MyParent3 - это ShippingInformation

Но, если я зациклю результат, как это, он работает:

var result = new List<MyDomainEntity>();
foreach (var dto in query.Distinct())
{
    result.Add(GetEntity(dto));
}

Я просто оставлю результат, если кто-то еще испытает это.

РЕДАКТИРОВАТЬ: Я сделал конфликт имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...