【发布时间】:2010-11-19 20:39:51
【问题描述】:
当我决定为我的新项目使用 OR/M(这次是 MySQL 的实体框架)时,我希望它可以节省我的时间,但我似乎失败了(现在是第二次)。
使用这个简单的 SQL 查询
SELECT * FROM POST ORDER BY addedOn DESC LIMIT 0, 50
它会在不到一秒的时间内执行并给出结果(该表大约有 60,000 行)。
这是我为此编写的等效 LINQ To Entities 查询
var q = (from p in db.post
orderby p.addedOn descending
select p).Take(50);
var q1 = q.ToList(); //This is where the query is fetched and timed out
但是这个查询甚至永远不会执行它总是超时(没有 orderby,它需要 5 秒才能运行)!我的超时设置为 12 秒,因此您可以想象它花费的时间远不止于此。
- 为什么会这样?
- 有什么方法可以查看实体框架发送到数据库的实际 SQL 查询是什么?
- 我是否应该放弃 EF+MySQL 并转而使用标准 SQL,以免失去所有试图使其正常工作的永恒?
我重新校准了我的索引,尝试了急切加载(即使没有 orderby 子句,它实际上也会失败)
请帮忙,我将放弃 MySQL 的 OR/M 作为一个失败的原因。
【问题讨论】:
-
好吧,我已经放弃EF+MySQL了
标签: mysql entity-framework linq-to-entities