Ich versuche, mit einer vorhandenen Datenbank zu arbeiten, und meine Fähigkeit, Änderungen vorzunehmen, sind schwierig. Ich hoffe, einige Übergangsarbeit zu machen und ein ORM zu sein, aber ich habe ein Problem getroffen.Entity Framework Relation mit null oder 0 Key
Ich benutze EF Fluent API (näher an der NHibernate Art und Weise Dinge zu tun) und wir haben eine Nullable Spalte ParentId
in der Datenbank. Ich habe eine HasOptional
Beziehung für diesen erstellt und es funktioniert:
HasOptional(x => x.Parent).WithMany().Map(m => m.MapKey("ParentId"));
Diese besondere Spalte scheint in dieser Spalte eine Menge 0en zu haben (sie verwenden Fremdschlüssel nicht) und ich kann nicht in der Lage sein, ein hinzufügen FK Constraint als das meine anderen Anwendungen brechen (da müsste ich gehen und alles ändern/löschen, das keine FK-Übereinstimmung hat). EF behandelt dies gut genug und für diese Datensätze, die kein passendes Elternteil für ID 0 haben, erhält EF null. Dies ist jedoch umfällt, wenn ich versuche, eine Linq Abfrage wie folgt zu verwenden:
myitems.Where(i => Parent != null)
alles auszuwählen, in dem Parent != null
. Dies führt diese Art von SQL-Abfrage
WHERE ParentId = null
Das ist natürlich nicht die gewünschten Ergebnisse erhalten, wie es die Datensätze zurückgibt, die eine ParentId
von 0
haben. Wenn ich das Objekt wie erwartet auf der Grundlage dieser SQL-Abfrage inspiziere, erhalte ich Ergebnisse, die beide korrekt übergeordnete Elemente haben, und viele, die parent als null haben.
Gibt es eine Möglichkeit, EF zu erhalten, diese Spalte in ihren Abfragen in etwas wie NULLIF(0)
zu übersetzen? Wenn nicht, brauche ich ein paar Ideen, wie ich das umgehen kann, damit ich EF benutzen kann, ohne dass es zu brechenden Änderungen in der Datenbank kommt.
Ich habe bereits eine berechnete Spalte berücksichtigt, aber das würde mir nur bei der Abfrage helfen. Es wird umfallen, wenn ich jemals versuche, das Wesen zu bestehen.