Запрос Entity Framework Core Linq не переводится в правильные операторы SQL - PullRequest
0 голосов
/ 14 апреля 2020

Итак, я отлаживаю наше приложение, которое использует Entity Framework Core 2.1.14. Я создал свои сущности из базы данных сначала с помощью лесов. База данных MySQL 5.7.29, поставщик данных SQL для EF Core: Oracle MySql .Data.EntityFrameworkCore 8.0.19.

Пример: простой запрос Linq должен создать правильное SQL утверждение в бэкэнде. Однако это не так. «Неактивно» - это байт?.

Dim associates = (From a In DatabaseContext.Associate
                  Where a.Inactive = 0
                  Select a.AssociateId).ToList()

Этот простой запрос Linq возвращает: SELECT `a`.`Inactive`, `a`.`AssociateID` FROM `associate` AS `a`. Таким образом, в основном он загружает всех партнеров и делает «где» в памяти и возвращает значения. Я знаю, что в соответствии с документацией некоторые запросы могут быть сложными и не могут быть переведены, но это самый простой из простых запросов. Это потому что столбец Inactive обнуляется? Что-то ужасно не так.

К вашему сведению: EF Core находится в библиотеке классов C#. Код VB находится в другом проекте VB, который ссылается на библиотеку классов.

1 Ответ

0 голосов
/ 14 апреля 2020

Хм, кажется, ответ состоит в том, чтобы сделать запрос более конкретным c в VB. Я полагаю, проблема заключается в преобразовании запроса между C# библиотекой классов и проектом VB.

Dim associates = (From a In DatabaseContext.Associate
                  Where a.Inactive.Value = Convert.ToByte(0)
                  Select a.AssociateId).ToList()

Это обеспечивает правильный запрос:

SELECT `a`.`AssociateID`
FROM `associate` AS `a`
WHERE `a`.`Inactive` = 0

Очень странно, что в C# вам не нужно сверяться со значением .Value и конвертировать 0 в байт, но в VB я должен был это сделать, другого способа заставить это работать не было. Спасибо всем, кто пытается помочь с этим.

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