2

Edit: Dies ist kein Problem mit der Unkenntnis der grundlegenden Programmierung (z. B. versuchen, eine Null-Objektreferenz zu dereferenzieren).Entity Framework 6 Query generiert NullReferenceException

Bearbeiten: Die Stack-Trace von EF innerhalb Linqpad hinzugefügt.

EF6 benutzen, habe ich eine sehr einfache Abfrage:

var menu = dbcontext.Tree.Where(t => t.Left > 2 && t.Right < 10).ToList(); 

Das funktionierte bis, bis er auf mysteriöse Weise gestoppt. dbcontext.Tree ist eine Sicht in SQL Server 2012. Unter Verwendung von Linqpad5 erhalte ich die Ergebnisse, die ich mit der integrierten Verbindung erwarte. Einrichten einer EF-Verbindung zu meinem Projekt, bekomme ich die NRE. Überprüfen der SQL, kann ich kopieren und fügen Sie das in ein SQL-Abfragefenster und erhalten Sie die richtigen Ergebnisse. Ich bekomme auch eine NRE ohne Where call.

Ich habe versucht, mein Modell aus der Datenbank zu aktualisieren, um alles zu aktualisieren. Ich habe versucht, die Ansicht vom Modell zu entfernen und zu aktualisieren. Ich habe versucht, das Modell vollständig zu löschen und neu zu erstellen. Ich habe Visual Studio UND meinen Computer neu gestartet. Ich bekomme die gleiche NRE für die Abfrage. Ich weiß nicht, was ich sonst noch versuchen kann, und diese NRE macht überhaupt keinen Sinn, wenn ich die Ergebnisse bekomme, die ich erwarte, wenn ich alles außer EF benutze. Ich würde es mit einem Fehler bei EF abgleichen, wenn ich es vorher nicht funktionierte.

Hat sich jemand damit beschäftigt? Eine Online-Suche nach dieser spezifischen Situation hat nichts bewirkt.

Stack Trace:

at System.Data.Entity.Core.EntityKey.AddHashValue(Int32 hashCode, Object keyValue) 
at System.Data.Entity.Core.EntityKey.GetHashCode() 
at System.Collections.Generic.GenericEqualityComparer`1.GetHashCode(T obj) 
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key) 
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value) 
at System.Data.Entity.Core.Objects.ObjectStateManager.TryGetEntityEntry(EntityKey key, EntityEntry& entry) 
at System.Data.Entity.Core.Objects.ObjectStateManager.FindEntityEntry(EntityKey key) 
at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet) 
at lambda_method(Closure , Shaper) 
at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) 
at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext() 
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() 
+0

Bitte haben Sie Verständnis für die Frage, bevor Sie sie als mögliches Duplikat markieren. – Pfhoenix

+0

Bitte fügen Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) bei. Bitte lesen Sie auch [Wie stelle ich eine gute Frage] (http://stackoverflow.com/help/how-to-ask). Da Ihre Frage derzeit geschrieben wird, ist das Duplikat für das, was ein NRE ist, die einzige und beste Lösung für Ihre Frage. Sie haben keine Stack-Trace angegeben, keine Angabe, was eigentlich Null ist (oder nicht: Beispiel ist "dbcontext" null? Ist "dbcontext.Tree" null? Ist das Ergebnis dbcontext.Tree.ToList() null oder werfen die NRE) oder irgendwelche anderen Besonderheiten. – Igor

+0

Also haben alle Bäume in Ihren Daten Werte für 'Left' und' Right'? – trailmax

Antwort

0

Das Problem ist, dass Ihr Modell (Tree im Beispiel oben) eine oder mehr Eigenschaften hat, die keine Nullwerte enthalten sind (und möglicherweise auch nicht auf NULL festlegbare in der Abbildung markiert) , aber Die entsprechende Spalte im Datenspeicher ist nullfähig. Diese Ausnahme würde sich nur dann manifestieren, wenn ein Datensatz mit einem null-Wert für eine dieser Spalten abgerufen wurde.

  • Modell fix - Wenn das Modell zu aktualisieren sicher sein Nullable<T> oder ? für Nullable-Wertetypen zu verwenden, und wenn Sie Zuordnungen definiert haben (entweder über Attribute oder in Typen, die EntityTypeConfiguration erben) auch angeben, dass die Eigenschaft optional Dort.
  • Fix des Datenspeichers - Alternativ können Sie das Datenspeicherschema und die Daten ändern, um sie an die im Modell erwarteten Daten anzupassen.