【发布时间】:2018-03-23 15:27:42
【问题描述】:
这是关于性能优化的:
我使用 LinqPad 通过 EF 6 DbContext 访问数据库。数据库首先使用代码创建。
当我运行查询时,我看到了正确的结果,但我在“SQL”选项卡中看到 LinqPad(和/或 EF)发出 SQL 来检查迁移历史记录:
-- Region Parameters
-- p__linq__0: String [UserQuery]
-- EndRegion
SELECT
"GroupBy1".A1 AS C1
FROM ( SELECT Count(1) AS A1
FROM ARIANE_ADMIN."__MigrationHistory" "Extent1"
WHERE "Extent1"."ContextKey" = :p__linq__0
) "GroupBy1"
GO
-- Region Parameters
-- p__linq__0: String [UserQuery]
-- EndRegion
SELECT
"GroupBy1".A1 AS C1
FROM ( SELECT Count(1) AS A1
FROM "__MigrationHistory" "Extent1"
WHERE "Extent1"."ContextKey" = :p__linq__0
) "GroupBy1"
GO
SELECT
"GroupBy1".A1 AS C1
FROM ( SELECT Count(1) AS A1
FROM "__MigrationHistory" "Extent1"
) "GroupBy1"
GO
SELECT
"Extent1"."Id",
"Extent1"."ModelHash"
FROM "EdmMetadata" "Extent1"
ORDER BY "Extent1"."Id" DESC
FETCH FIRST 1 ROWS ONLY
GO
只有这样才有实际的查询。
由于我通常通过多层 VPN 访问数据库,因此额外的查询花费超过一秒。
我的问题是:
- 我可以完全避免对“__MigrationHistory”的查询吗?
- 如果不是:有没有办法传递正确的参数而不是“[UserQuery]”,以便第一个查询返回正确的结果?
我使用 Devart dotconnect for Oracle 连接到 Oracle 服务器。
【问题讨论】:
-
this 的可能重复项。所以 EF 需要检查你是否是最新的。您可以通过using a null initializer 阻止它。
标签: entity-framework ef-code-first linqpad