C# 使用ODP.NET Oracle 11G铸造编号(10,0)到编号(10,0)的实体框架

C# 使用ODP.NET Oracle 11G铸造编号(10,0)到编号(10,0)的实体框架,c#,oracle11g,entity-framework-5,odp.net,odac,C#,Oracle11g,Entity Framework 5,Odp.net,Odac,我使用的是Oracle 11G和.NET 4.5 MVC web api中受Oracle 11G支持的实体框架EF5的最高版本。还使用最新的ODAC Oracle.DataAccess dll 到目前为止,我们已经深入到一个使用这些技术的项目中,在我们的开发环境中,一切都运行得很好 当我们开始使用更大的测试数据库时,问题开始出现。我们已经在结果查询中隔离了这个问题,其中有大量的转换正在进行 例如: CAST("Extent10"."TAX_ID" AS number(10,0)))) 事情是,

我使用的是Oracle 11G和.NET 4.5 MVC web api中受Oracle 11G支持的实体框架EF5的最高版本。还使用最新的ODAC Oracle.DataAccess dll

到目前为止,我们已经深入到一个使用这些技术的项目中,在我们的开发环境中,一切都运行得很好

当我们开始使用更大的测试数据库时,问题开始出现。我们已经在结果查询中隔离了这个问题,其中有大量的转换正在进行

例如:

CAST("Extent10"."TAX_ID" AS number(10,0))))
事情是,
TAX\u ID
已经是一个
数字(10,0)
!不需要强制转换,它发生在导致表扫描的where子句中。对于强制转换,查询需要40秒才能完成。如果我删除强制转换,则查询需要0.47秒

我已经研究到了筋疲力尽的地步,试图通过配置、数据类型调整或通过祈祷和动物牺牲来找到一些方法,以防止生成的查询在where中进行转换


如果有人有什么建议,你会让这个疲惫的老程序员非常感激。

我刚刚在这里发现了同样的问题。将要尝试的解决方案建议会回来。好的,在堆栈溢出的另一部分找到了解决方案。在Map class.Property(x=>x.TAX_ID).HasColumnType(“INT”);我在这里发现了同样的问题。将要尝试的解决方案建议会回来。好的,在堆栈溢出的另一部分找到了解决方案。在Map class.Property(x=>x.TAX_ID).HasColumnType(“INT”);