【问题标题】:Entity Framework 5.0 query results are different from a direct SQL query on the databaseEntity Framework 5.0 查询结果不同于对数据库的直接 SQL 查询
【发布时间】: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 字段是否为布尔值?
  • 如果IsAdvisorIsActive 是数据库中的整数,则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


【解决方案1】:

首先,感谢您的回复。这是我自己的错误,之前的开发人员单独设置了某些记录的显示属性 :(,EF 正在返回正确的结果集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2015-08-04
    相关资源
    最近更新 更多