c# - EF Core 3.1 在查询时不使用帮助程序类进行翻译
问题描述
在 .NET Core 2.2 中,我曾经使用一个帮助类来解密数据库中的数据并检索用户信息,但现在我不能了。我得到一个例外,说它不能被翻译。
这与 .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(value: c.Email, sec: c.Em) == __login_Email_0 && __login_Password_1 == Hash.get(c.Password))'。以可翻译的形式重写查询,或通过插入对 AsEnumerable()、AsAsyncEnumerable()、ToList() 或 ToListAsync() 的调用显式切换到客户端评估。有关详细信息,请参阅https://go.microsoft.com/fwlink/?linkid=2101038。"}
我不明白为什么我应该明确使用AsEnumerable()
, AsAsyncEnumerable()
, ToList()
, or ToListAsync()
?
更新:所以我尝试通过添加来遵循该示例,AsEnumerable
但它必须与 await 并且我收到错误where
var cp = await Context.Company.AsAsyncEnumerable().Where(a => Encrypt.Decry(a.Email, a.Em) == login.Email && login.Password == Hash.get(a.Password)).SingleOrDefaultAsync();
解决方案
EF Core 无法转换Encrypt.Decry
为 SQL 查询。这就是您看到错误的原因。您可以将所有数据加载到内存中,然后执行Encrypt.Decry
.
来自https://docs.microsoft.com/en-us/ef/core/querying/client-eval:
在 3.0 版之前,Entity Framework Core 支持在查询中的任何位置进行客户端评估。有关详细信息,请参阅以前的版本部分。
很可能现在它是这样实现的,以避免无意的客户端评估,其中大量数据可以加载到内存中。现在您应该显式配置客户端评估。
推荐阅读
- javascript - 有角度的孩子对孩子的交流
- android - 为什么在我的项目中实现 mapbox 时会出错?
- flutter - 在 october cms 中使用 vdomah JWT 插件生成的令牌不被 Flutter 路由接受
- javascript - 使用js字符串检查是否允许扩展
- c# - 如果一个在刚体内部,Unity Collision 不会按预期工作
- reactjs - 项目数组的 useCallback 依赖项
- python - RuntimeError: 参数 #3 'mat2' 的张量在 CPU 上,但预计它在 GPU 上(同时检查 addmm 的参数)
- python - 使用烧瓶在浏览器中从 Amazon S3 打开文件
- android - 如何将 Keras MobileNet 预处理单元引入 Android 应用程序?
- html - 将 div 缩放到父 div 的 100% 与同一级别的其他 div 的最简单方法?