EF Core 3.1 не переводит с вспомогательным классом при запросе - PullRequest
0 голосов
/ 22 марта 2020

In. NET Core 2.2, я использовал вспомогательный класс, который расшифровывает данные из базы данных и извлекает информацию о пользователе, но теперь я не могу. Я получаю исключение, говорящее, что оно не может быть переведено.

Это тот же лог c, используемый в. NET Core 2.2

var cp = await Context.Company
                      .Where(a => Encrypt.Decry(a.Email, a.Em) == login.Email 
                                  && login.Password == Hash.get(a.Password))
                      .SingleOrDefaultAsync();

Исключение:

Выражение LINQ 'DbSet.Where (c => Encrypt.Decry (значение: c .Email, se c: c .Em) == __login_Email_0 && __login_Password_1 == Ха sh .get (c .Password)) 'не может быть переведено. Либо переписать запрос в форме, которую можно перевести, либо явно переключиться на оценку клиента, вставив вызов либо AsEnumerable (), AsAsyncEnumerable (), ToList (), либо ToListAsyn c (). См. https://go.microsoft.com/fwlink/?linkid=2101038 для получения дополнительной информации. "}

Я не понимаю, почему я должен явно использовать AsEnumerable(), AsAsyncEnumerable(), ToList() или ToListAsync()?

Обновление: поэтому я попытался следовать примеру, добавив AsEnumerable, но это должно быть с ожиданием, и я получаю сообщение об ошибке where

 var cp = await Context.Company.AsAsyncEnumerable().Where(a => Encrypt.Decry(a.Email, a.Em) == login.Email && login.Password == Hash.get(a.Password)).SingleOrDefaultAsync();

1 Ответ

2 голосов
/ 22 марта 2020

EF Core не может перевести Encrypt.Decry в SQL запрос. Вот почему вы видите ошибку. Вы можете загрузить все данные в память и затем выполнить Encrypt.Decry.

С https://docs.microsoft.com/en-us/ef/core/querying/client-eval:

До версии 3.0, клиент Entity Framework Core поддерживал клиента оценка в любом месте запроса. Для получения дополнительной информации см. Раздел предыдущих версий.

Скорее всего, теперь он реализован таким образом, чтобы избежать непреднамеренной оценки клиента, когда много данных может быть загружено в память. Теперь вам нужно явно настроить оценку клиента.

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