繁体   English   中英

实体框架核心 Linq 查询无法转换为正确的 SQL 语句

[英]Entity Framework Core Linq query doesn't translate to correct SQL statements

所以我正在调试我们使用 Entity Framework Core 2.1.14 的应用程序。 我首先通过脚手架从数据库创建了我的实体。 数据库是 MySQL 5.7.29,EF Core 的 SQL 数据提供程序是 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` 所以基本上它会下载所有关联并在 memory 中执行“位置”并返回值。 我知道根据文档,一些查询可能很复杂并且无法翻译,但这是最简单的简单查询。 是因为 Inactive 列可以为空吗? 有什么可怕的不对。

仅供参考:EF Core 位于 class 库中,即 C#。 VB 代码位于另一个引用 class 库的 VB 项目中。

嗯,似乎答案是使查询在 VB 中更具体。 我猜 C# class 库和 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 中我必须这样做,没有其他方法可以让它工作。 感谢所有试图帮助解决此问题的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM