Warum fügt Entity Framework in der WHERE-Klausel unnötige (AND [param] IS NOT NULL) hinzu?

8

Angesichts dieses einfachen Modells:

%Vor%

Und diese einfache Abfrage: (userID ist ein int)

%Vor%

Die folgende Abfrage wird generiert:

%Vor%

Warum wird dieses AND NOT NULL-Kriterium hinzugefügt? Die Datenbank lässt Nullen in diesem Feld nicht zu und ein Int darf in .net nicht null sein.

Dies passiert überall in meinen Abfragen. Es ist ziemlich nervig, aber beeinflusst es die Leistung?

Wie kann ich es loswerden?

Dies ist auf einem Datenbank-First-Modell.

    
ECC-Dan 20.11.2013, 15:14
quelle

2 Antworten

1

Ich habe die zusätzliche "(AND [param] IS NOT NULL) in der WHERE-Klausel entfernt", indem ich die Eigenschaft in der Modellklasse, die für die Datenannotation erforderlich ist, markiert habe.

Ich verwende EF 6.

    
krprasad 30.10.2014, 15:58
quelle
3

Natürlich würde es den Scheck machen. Denken Sie darüber nach, wie Entity Framework die Abfrage aus Ihrer LINQ-Anweisung erstellen muss. Es verwendet eine Menge Reflektion (wie in diese SO Frage ) um die Arbeit zu erledigen. Daher bedeutet die Verwendung von Reflektion, dass Sie wahrscheinlich nicht die Zeit damit verbringen, darüber nachzudenken, welchen Typ ein bestimmtes Feld hat oder ob es nullfähig ist oder nicht - vor allem, weil es einfach die Null-Überprüfung hinzufügen und mit der Abfrage erledigt werden kann.

Meine Vermutung ist, dass dies mit Absicht gemacht wurde, da Reflektionen verwendet werden können, um den Typ zu erfassen und dann zu prüfen, ob es NULL-Werte gibt oder nicht viele Parameter). Es ist vielleicht nicht notwendig, aber ich denke, es macht die Dinge viel einfacher für den täglichen Gebrauch.

    
IronMan84 20.11.2013 15:26
quelle