![](/img/trans.png)
[英]Slow updates with Entity Framework 4.3 and SQL Server Compact Edition 3.5
[英]Entity Framework 3.5 + SQL Server Compact 3.5, slow performace because of cast
我正在使用VS2008,.NET 3.5,实体框架3.5,Sql Server Compact 3.5 SP2。 使用数据库优先方法使用EF访问SQL SC 3.5。
我正在使用一个简单的查询(linq和EF),该查询应该对列StanjeId(tinyint)和ArtiklId(int)使用现有的复合索引。
var compQuery2 = from art in MobileDb.Artikl
where art.Stanje.StanjeId == (byte)1
&& art.ArtiklId == tmp1
select art;
var quer1 = MobileDb.Artikl.Where(a => a.Stanje.StanjeId == (byte)1 && a.ArtiklId == tmp1);
使用(compQuery2 as System.Data.Objects.ObjectQuery).ToTraceString()
生成的查询为:
SELECT
1 AS [C1],
[Extent1].[ArtiklGuid] AS [ArtiklGuid],
.
.
[Extent1].[StanjeId] AS [StanjeId],
[Extent1].[ZemljaPorijeklaDrzavaGuid] AS [ZemljaPorijeklaDrzavaGuid]
FROM [Artikl] AS [Extent1]
WHERE (1 = ( CAST( [Extent1].[StanjeId] AS int))) AND ([Extent1].[ArtiklId] = @p__linq__4)
问题在于,尽管StanjeId的类型为tinyint(等效字节),但生成的查询在列StanjeId的查询的where部分中使用强制转换为int。 这将导致SQL SC 3.5不使用索引查找,而是使用非常慢的表扫描(表具有>1M
条记录)。
如何使EF 3.5在生成的SQL查询的何处不将CAST as int
?
试试这个运算符
Byte.CompareTo(Byte)
, art.Stanje.StanjeId.CompareTo(one) == 0
,
即使这明确地进行了强制转换,我们也必须开始研究diff方法的源代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.