【问题标题】:Entity Framework returns 0 rows, when the same SQL command returns many rowsEntity Framework 返回 0 行,当同一个 SQL 命令返回很多行时
【发布时间】:2012-04-25 06:09:25
【问题描述】:

我有一个模型 (M),其中包含两个表(A 和 B)。当我从 MVC 应用程序运行代码以从 (A) 中获取行时,如下所示:

var context =new ClaimsHistorical();
context.CommandTimeout = 120;
IList<ClaimsSLAMonth> list = context.ClaimsSLAMonths.Where(x=>x.timeperiod == "2012-03").ToList();
var final = list.Select(c => new[]{
            c.branch.ToString().Trim(), c.NLPR_SLA.ToString() ?? null, c.NLPR_count.ToString() ?? null, c.NLPR_AvgLocktime.ToString() ?? null, c.NLPR_PIn.ToString() ?? null, c.NLPR_POut.ToString() ?? null,
            c.NLGA_SLA.ToString() ?? null, c.NLGA_count.ToString() ?? null, c.NLGA_AvgLocktime.ToString() ?? null, c.NLGA_PIn.ToString() ?? null, c.NLGA_POut.ToString() ?? null
        });

当我为列表设置断点时。选择检查命令时,它会为我提供在 SSMS 中工作的 SQL

它返回 0 行(没有错误、警告、消息)。我复制了 EF 正在“执行”的 SQL 查询并将其粘贴到 SQL Server Management Studio,它返回给我大约 5 行。

此外,当我运行完全相同的代码时,除了将表名替换为 (B) 之外,我得到了正确的行。我试图重新创建模型,但它仍然没有返回任何内容。我是否遗漏了一些明显的东西,还是有什么严重的错误?

【问题讨论】:

  • 你说你拿了EF“执行”的SQL,所以你运行SQL分析器,复制生成的SQL语句,然后在SSMS中运行?对吗?
  • @M.Babcock 的意思是您使用了 SQL Profiler 中的实际语句,还是使用了调试器在检查查询时显示的语句?
  • 是的。在它选择东西的时候放一个断点,查看对象属性(它有连接字符串和命令字符串)将它复制到 SSMS,它给了我想要的行。
  • 你的数据类型是什么?我想知道您的数据是否可能被填充(就像您使用 char 数据类型一样),因此精确比较失败。也许试试 .Startswith()
  • @m4tt1mus 同样的东西 0 行....

标签: c# asp.net-mvc-3 entity-framework linq-to-entities


【解决方案1】:

那么显然重启计算机解决了这个问题?

如果有人对此有任何可能的原因(缓存、设置等),这将有助于防止这种情况再次发生。

【讨论】:

  • 还有其他你知道的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-23
  • 1970-01-01
  • 2021-05-15
  • 2013-01-22
  • 1970-01-01
  • 2014-05-19
  • 1970-01-01
相关资源
最近更新 更多