【发布时间】:2016-07-12 21:12:54
【问题描述】:
所以我有一个非常简单的查询(针对单个表),当从 Entity Framework 运行时与直接运行 SQL Server Management Studio 时返回不同的结果集。起初我以为 EF 正在生成不同的 SQL,但在将其重写为直接 SQL 查询后,它仍然返回不同的结果。
工作查询:
SELECT *
FROM Users
WHERE IsActive = 1
AND IsAdvisor = 1
ORDER BY Initials
失败代码:
//var query = this.BaseDB.Users.Where(x => x.IsAdvisor && x.IsActive).OrderBy(x => x.Initials);
var query = this.BaseDB.Users.SqlQuery("SELECT * FROM Users WHERE Users.IsActive = 1 AND Users.IsAdvisor = 1 ORDER BY Initials");
return query.ToList(); //this query (either variant, returns the same result set, but is missing values.
知道发生了什么吗?顺便说一句,我做了仔细检查以确保我查询的是同一个数据库。
【问题讨论】:
-
如果您使用 SqlQuery,AFAIR EF 不会触及查询,因此它应该产生相同的结果。如果它不能确保您连接到同一个数据库。
-
IsActive 或 IsAdvisor 字段是否为布尔值?
-
如果
IsAdvisor和IsActive是数据库中的整数,则x.IsAdvisor无法解析为布尔值。如果它们是整数,只需检查查询中的 int 值,var query = this.BaseDB.Users.Where(x => (x.IsActive == 1) && (x.IsAdvisor == 1)).OrderBy(x => x.Initials).ToList(); -
对数据库运行跟踪并检查实际执行的内容。
-
结果不同是什么意思? EF 是否返回您期望的行的子集?完全不同的行?根本没有行?请澄清并发布
Users表的架构。
标签: c# sql sql-server entity-framework-5