1

在使用 Devart DotConnect for PostgreSQL 连接器查询实体框架实体的空字段时,我观察到一种奇怪的行为。

例如:如果我进行了以下 2 个测试:

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

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

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

测试1的结果:

{选择
 CAST(NULL AS int)作为“C1”,
 CAST(NULL AS varchar)作为“C2”,
 CAST(NULL AS varchar)作为“C3”,
 CAST(NULL AS varchar)作为“C4”
从(选择 1 作为 X)作为“SingleRowTable1”
哪里真=假}

测试2的结果:

{选择
"Extent1".id_bloc,
"Extent1".numero,
"Extent1".nom,
"Extent1". 滴度
FROM “角色”.bloc AS “Extent1”
其中“Extent1”.id_bloc = 100}

查询空字段时的结果很奇怪......我期待的结果类似于测试 2 的结果,但带有"Extent1".id_bloc IS NULLWHERE 子句......

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

4

1 回答 1

1

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

实体键不能为空,这就是实体框架避免对表的不必要请求的原因:生成假 SQL,它给出相同的空结果集但不占用服务器资源。

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

于 2012-10-31T09:58:49.767 回答