禁用 CAST AS 以优化实体框架中的查询

Taa*_*aai 5 c# sql oracle entity-framework

我正在使用Entity Framework 5,我想从Oracle 10g数据库中选择数据。问题是数据库表很大,Entity Framework生成的查询无效。我想摆脱那些CAST( [column] AS [type] )。有什么设置可以关闭它们吗?

C#代码:

var context = new APPDB();
var q = context.APP_TABLE.Where(i => i.ID == 123);

// This is how I did get the generated SQL query
var str = ((System.Data.Objects.ObjectQuery) q ).ToTraceString();
Run Code Online (Sandbox Code Playgroud)

生成的查询:

SELECT 
 CAST( "Extent1"."ID" AS number(10,0)) AS "C1", 
"Extent1"."DESCRIPTION" AS "DESCRIPTION"
FROM "APP"."APP_TABLE" "Extent1"
WHERE (123 = ( CAST( "Extent1"."ID" AS number(10,0))))
Run Code Online (Sandbox Code Playgroud)

我想要的是生成性能更好的查询的代码:

SELECT 
"Extent1"."ID" AS "C1", 
"Extent1"."DESCRIPTION" AS "DESCRIPTION"
FROM "APP"."APP_TABLE" "Extent1"
WHERE
"Extent1"."ID" = 123
Run Code Online (Sandbox Code Playgroud)

小智 3

迟做总比不做好)

如果您使用代码优先和手动映射类,请对 int 属性使用 HasColumnType("INT") 配置。

例如:

var entity = builder.Entity<APP_TABLE>();

entity
    .HasKey(x => x.ID)
    .ToTable("APP_TABLE", "SCHEMA");

entity
    .Property(x => x.ID)
    .HasColumnType("INT");
Run Code Online (Sandbox Code Playgroud)