小编Taa*_*aai的帖子

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

我正在使用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" …
Run Code Online (Sandbox Code Playgroud)

c# sql oracle entity-framework

5
推荐指数
1
解决办法
2093
查看次数

处理PostgreSQL外键错误与防止它们发生

我是否真的需要检查另一个表中的记录是否真的存在,如果PostgreSQL还是会检查外键约束?

Normaly parent在创建child记录之前检查是否存在记录.但这是另一个执行查询.所以我认为如果只处理PostgreSQL错误并检查是否parent存在记录不存在(违反外键约束)会更好.

是否更好地利用数据库服务器功能,或者它没有用于此目的?您是否建议在创建新记录之前进行所有完整性检查?

CREATE TABLE "public"."categories" (
    "id" serial,
    "name" varchar(100),
    CONSTRAINT "categories__id_pkey" PRIMARY KEY ("id")
);

CREATE TABLE "public"."products" (
    "id" serial,
    "category_id" integer NOT NULL,
    "name" varchar(100),
    CONSTRAINT "products__id_pkey" PRIMARY KEY ("id"),
    CONSTRAINT "products__category_id_fkey" FOREIGN KEY ("category_id")
        REFERENCES "categories" ("id") ON DELETE CASCADE
);
Run Code Online (Sandbox Code Playgroud)

伪代码:

if (query("SELECT * FROM categories WHERE id = 123"))
    query("INSERT INTO products (category_id, name) VALUES (123, 'Something')")
else
    throw Error("Parent record does not exist")

try
    query("INSERT INTO …
Run Code Online (Sandbox Code Playgroud)

sql postgresql

2
推荐指数
1
解决办法
1446
查看次数

标签 统计

sql ×2

c# ×1

entity-framework ×1

oracle ×1

postgresql ×1