Mat*_* M. 7 c# mysql entity-framework
我遇到了MySQL和Entity Framework 4.0的严重问题.我已将表格放到EF Designer表面上,一切似乎都没问题.但是,当我以下列方式执行查询时:
using(entityContext dc = new entityContext()) {
int numRows = dc.myTable.Count();
}
Run Code Online (Sandbox Code Playgroud)
生成的查询看起来像这样:
SELECT `GroupBy1`.`A1` AS `C1`
FROM (SELECT Count(1) AS `A1`
FROM (SELECT `pricing table`.`a`,
`pricing table`.`b`,
`pricing table`.`c`,
`pricing table`.`d`,
`pricing table`.`e`,
`pricing table`.`f`,
`pricing table`.`g`,
`pricing table`.`h`,
`pricing table`.`i`
FROM `pricing table` AS `pricing table`) AS `Extent1`) AS `GroupBy1`
Run Code Online (Sandbox Code Playgroud)
显而易见,这是一个令人难以置信的未经优化的查询.它正在选择每一行!这不是最佳的,我甚至不可能在此时使用MySQL + EF.
我已经尝试了MySQL 6.3.1 [安装很有趣]和DevArt的dotConnect for MySQL,两者都产生了相同的结果.这张表有150万条记录......需要6-11秒才能执行!
我究竟做错了什么 ?有没有办法优化这个[和其他查询]来生成合理的代码,如:
SELECT COUNT(*) FROM table
Run Code Online (Sandbox Code Playgroud)
?
使用SQLServer生成相同的查询几乎没有时间,并生成合理的代码.
救命!
编辑:我还想指出,我切换到DevArt dotConnect MySQL LINQ to SQL驱动程序,并使用L2S over EF快1000000倍.这也包括查询.
在EF中选择任何东西似乎都会产生完全疯狂的查询.
dc.pricing_table.OrderBy(j => j.a).Skip(100).Take(100).ToList();
SELECT `Extent1`.`a`,
`Extent1`.`b`,
`Extent1`.`c`,
`Extent1`.`d`,
`Extent1`.`e`,
`Extent1`.`f`,
`Extent1`.`g`,
`Extent1`.`h`,
`Extent1`.`i`
FROM (SELECT `pricing table `.`a`,
`pricing table `.`b`,
`pricing table `.`c`,
`pricing table `.`d`,
`pricing table `.`e`,
`pricing table `.`f`,
`pricing table `.`g`,
`pricing table `.`h`,
`pricing table `.`i`
FROM `pricing table ` AS `pricing table`) AS `Extent1`
ORDER BY `a` ASC
LIMIT 100,100
Run Code Online (Sandbox Code Playgroud)
再次,一个完全低调的错误查询.LIMIT 100,100绝对是错误的地方.这当然不会对我有用.
问题可能与您在.edmx或.edml文件中定义查询有关.
如果您有View,或者您的表没有定义主键,Designer通常会生成DefiningQuery.请检查模型的XML代码并删除DefiningQuery,以防它存在但不必要.
| 归档时间: |
|
| 查看次数: |
1846 次 |
| 最近记录: |