Entity Framework 2.0 Левое внешнее соединение оценивается локально в Sqlite - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть ASP.Net Core API, который должен работать как с Sql Server, так и с Sqlite-соединением в зависимости от настроек клиента.У меня есть несколько случаев в моем приложении, где я делаю левые внешние соединения с Linq.Я основал эти левые внешние соединения на ответе Стефана Штайгера в на этот вопрос .

Запросы выполняются очень хорошо при подключении к Sql Server, однако при запуске в Sqlite я получаю предупреждение о том, что запрос будет оцениваться локально, и заметное снижение производительности.

Например,учитывая следующий сценарий, где у меня есть запись Ord, с которой может быть связана активная запись Odt.У меня есть запрос, который выглядит следующим образом:

var test = await (from order in _context.Ord.AsNoTracking()
                  from activeOdt in _context.Odt.AsNoTracking()
                                                 .Where(x => x.Active)
                                                 .DefaultIfEmpty()
                  select new { order, activeOdt }
                 ).ToListAsync();

Только в Sqlite, я получаю следующее предупреждение:

warn: Microsoft.EntityFrameworkCore.Query [20500] Выражение LINQ'из Odt activeOdt в {из Odt x в значении (Microsoft.EntityFrameworkCore.Query.Internal.EntityQueryable`1 [Smart.Common.Odt]), где (([x] .OrdId == [order] .Id) И также] .Active) select [x] => DefaultIfEmpty ()} 'не удалось перевести и будет оцениваться локально.

Я как-то неправильно пишу этот запрос?Нужно ли обрабатывать это по-другому в Sqlite, или это, возможно, какое-то ограничение Sqlite в Entity Framework?

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