【发布时间】:2013-12-28 02:54:57
【问题描述】:
我有一个使用 EF4 的 MVC3 应用程序,它访问了 Oracle 后端。我在使用链接访问其中一个表时遇到了一个奇怪的问题。该表称为 EXPENSES,它有一个称为 PK 的标识列(类型:NUMBER)。尽管有它的名字,PK 列实际上并不是主键——它只是有一个唯一的索引。
当我对该表执行 LINQ 查询时,它非常慢,甚至返回 列出结果 = dataContext.EXPENSE.Where(x => x.PROJECT_ID == trgProjectID).ToList();
我查看了它发送到数据库的原始 SQL(使用 ToTraceString),并且 SQL 本身运行得非常快(不到 2 秒)。
请注意,我的查询不包括 PK 列本身。但是,PROJECT_ID 列上也有一个索引(在本例中为非唯一索引)。
奇怪的是,如果我“破解”查询,以便在 Where 语句中过滤 PK(基本上,我将 PK 值硬编码到其中,只是为了看看会发生什么),查询会很快完成。
我猜这个问题与 EF 层内的密钥解析有关。我尝试将 Expenses DBSet 上的 MergeOption 更改为“NoTracking”,但这没有效果。
任何想法都将不胜感激......!
【问题讨论】:
-
项目id和trgProject ID是同一类型吗?也许你可以做两个查询的练习,看看执行计划,这可以给你更多关于 sql server 发生了什么的信息
标签: sql .net oracle linq entity-framework