我按照教程here从现有MySQL数据库自动生成我的POCO类。生成的POCO类按预期为我的所有MySQL表对象工作。该数据库还有一个相当复杂的遗留MySQL视图,它使用INNER和LEFT OUTER连接引用8个表。视图本身很好,在MySQL工作台中进行测试时没有问题。但是,当我尝试使用自动生成的POCO类为视图选择一些记录时,即使其(手写)等效的SQL语句工作得非常好并且按预期方式返回所需的记录,操作也会超时。所以我启用了MySQL中的日志记录来检查幕后发生的事情,结果发现EF生成的SQL与我预期的有些不同。
我手写的版本是:
select a, b, c from MyView where a = 1 /* 'a' is a primary key on one of the underlying tables */
但是,EF生成的版本是:
select Extent1.a, Extent1.b, Extent1.c from (select a, b, c from MyView) as Extent1 where Extent1.a = 1
这解释了为什么我得到超时,因为MyView有近100万行。但是,我仍然想知道为什么EF会发出这样一个无效的查询,以及2)我应该如何解决这个问题。
我正在使用VisualStudio 2010(目前无法升级到2012),.NET Framework 4.0,EF 4.0&用于C#的EF 5.x DbContext Generator(如上面教程中所述)