我的应用程序正在通过SQL Azure数据库使用实体框架。
它具有一项功能,允许用户根据给定的电话号码搜索记录。要搜索的表有很多列,其中包括3个电话号码列:BusinessPhone
,HomePhone
和CellPhone
列。这三列都已建立索引。
我的EF DbContext在WHERE子句的一部分中生成了以下内容:
WHERE (10 = [Extent1].[Debtor_DebtorStatus]) AND
(((LOWER([Extent1].[BusinessPhone])) = (LOWER(N'012345678')))
OR ((LOWER([Extent1].[HomePhone])) = (LOWER(N'012345678')))
OR ((LOWER([Extent1].[CellPhone])) = (LOWER(N'012348678')))
)
查询大约需要3分钟才能返回响应(即使我在SQL Management Studio中运行它)。
如果我编辑此SQL语句并删除LOWER()
函数,那么它将在不到一秒钟的时间内执行!!!
是否可以通过某些设置使EntityFramework在生成的SQL语句中不使用LOWER()
函数?
如果不可能的话,有没有办法我可以在数据库上执行之前截取该SQL语句并删除代码中的LOWER()
函数?