如何使用DotConnect for PostgreSQL在Entity Framework实体中查询空字段值

时间:2012-10-30 20:46:10

标签: entity-framework postgresql devart dotconnect

我在查询带有Devart DotConnect for PostgreSQL连接器的Entity Framework实体的null字段时发现了一个奇怪的行为。

例如:如果我进行了以下两项测试:

var test1 = context.blocs.Where(x => x.id_bloc == null);

var test2 = context.blocs.Where(x => x.id_bloc == 100);

检查EF自动生成的SQL查询时,我获得以下结果:

test1的结果:

{SELECT 
 CAST(NULL AS int) AS "C1",
 CAST(NULL AS varchar) AS "C2",
 CAST(NULL AS varchar) AS "C3",
 CAST(NULL AS varchar) AS "C4"
FROM  ( SELECT 1 AS X) AS "SingleRowTable1"
WHERE true = false}

test2的结果:

{SELECT 
"Extent1".id_bloc,
"Extent1".numero,
"Extent1".nom,
"Extent1".titre
FROM "role".bloc AS "Extent1"
WHERE "Extent1".id_bloc = 100}

查询空字段时的结果非常奇怪......我期待的结果类似于测试2的结果但是带有"Extent1".id_bloc IS NULL WHERE子句......

这是一个错误吗?如何有效地查询空字段?

1 个答案:

答案 0 :(得分:1)

是否使用Entity Key属性定义了id_bloc属性?如果是,则正确生成结果SQL。

实体密钥无法为空,这就是为什么实体框架避免对表的不必要请求:生成假SQL,它提供相同的空结果集但不占用服务器资源。

您可以使用SQL Server检查行为(通过System.Data.SqlClient) - 它必须相同。