【发布时间】: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