实体框架5和Oracle:在查询非独一索引字段时,带有封锁影响机能的
我对Entity Framework 5和Oracle DB存在机能题目. 我有一个简朴的SQL选择:SELECT * FROM NOTE WHERE NOTENUMBER =’1A23456′ NOTENUMBER包括在名为NOTE的表的索引中,但该字段不是主键/独一. >当我行使Oracle SQL Developer执行语句时,返回功效 我猜疑有两件事: > EF和Oracle.DataAccess-provider存在一些题目,没有行使可用的非独一索引.假如我有Entity Framework 5的调试标记会有所辅佐,但我无法在任那里所找到它们. 假如我这样挪用我的存储库: 选择“Extent1”.“NOTE_KEY”AS“NOTE_KEY”, 查询必要约莫5500毫秒. 另一方面,假如我像这样挪用我的存储库: 选择“Extent1”.“NOTE_KEY”AS“NOTE_KEY”, 查询必要约莫30ms. 以是独一的区别是WHERE子句中前提的次序,以及后者好像没有EF替代参数的究竟. 我行使VS2010和.NET4,并参考EF5(v4.4.0.0). public IQueryable<NOTE> All(Expression<Func<NOTE,bool>> predicate = null) { var setOfNotes = GetDbSet<NOTE>(); var notesQuery = from note in setOfNotes select note; if (predicate != null) { notesQuery = notesQuery.Where(predicate); } return notesQuery; } 我实行建设CompiledQuery,我实行行使setOfNotes.AsNoTracking(),我实行行使.NET 4.5 – 机能没有差别. 我可以或许快速得到这个特定查询的一种要领是行使Oracle的根基.NET数据提供措施(ODB.NET)并手动构建查询,但我甘愿过错峙行使该办理方案.同样,假如我在where子句中行使首要字段,纵然行使EF和沟通的All-method,查询也很快. 以是题目好像在EF的某个处所.假如我只有EntityFramework.dll的标记,我认为可以找到更多. EF挪用谓词的方法会有题目吗?如安在EF中替代’@p_linq_0’参数? 办理要领我碰着了相同的题目.在我的环境下没有行使索引的缘故起因是我从.NET转达一个字符串(unicode)作为参数.将其与非unicode数据库字段举办较量.办理方案是在将字符串参数转达给非unicode之前将其转达给where子句: using System.Data.Objects; EntityFunctions.AsNonUnicode( myUnicodeParam) (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |