J'observe un comportement étrange lors de l'interrogation de champ null d'une entité Entity Framework avec le connecteur Devart DotConnect for PostgreSQL.Comment interroger une entité Entity Framework pour une valeur de champ null avec DotConnect pour PostgreSQL
Par exemple: Si je fait les 2 tests suivants:
var test1 = context.blocs.Where(x => x.id_bloc == null); var test2 = context.blocs.Where(x => x.id_bloc == 100);
Lors de la vérification de requête SQL généré automatiquement EF-je obtenir les résultats suivants:
Résultat 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}
Résultat pour test2:
{SELECT "Extent1".id_bloc, "Extent1".numero, "Extent1".nom, "Extent1".titre FROM "role".bloc AS "Extent1" WHERE "Extent1".id_bloc = 100}
Le résultat lors de l'interrogation pour le champ nul est très étrange ... Je me attendais à un résultat similaire à l'épreuve 2 résultat, mais avec une clause WHERE "Extent1".id_bloc IS NULL
...
Est-ce un bug? Comment puis-je effectuer une requête efficace pour un champ nul?
Avez-vous essayé 'Where (x =>! X.id_bloc.HasValue)'? (Mais honnêtement, je m'attendrais à ce qu'il crée le même SQL.) – Slauma
Je ne connais pas ce fournisseur de requêtes, mais at-il mappé le champ de base de données 'id_bloc' à un type nullable alors que dans la base de données ce n'est pas? Il peut décider de créer une requête bidon à bas prix lorsque les prédicats évaluent à «false» à coup sûr. Que se passe-t-il si vous tapez 'Where (x => true == false)' vous-même? –
Vous avez raison, une requête fictive a été générée car j'essayais d'évaluer si une propriété non nullable était nulle ... Merci –