Ich benutze SQLite und die Closure-Erweiterung, um eine Hierarchie zu speichern. Die Nicht-Schließungstabelle wird als
erstellt %Vor% Der Wurzelknoten wird mit parent_id
auf NULL
eingefügt. Die Klasse, in die Dapper wechseln kann, ist
Ich denke, Dapper sollte keine Probleme haben, Root- oder Nicht-Root-Knoten zu lesen, da die betreffende Spalte eindeutig als Nullable markiert ist. Alle Einträge wie folgt abfragen:
%Vor%wirft auf den Wurzelknoten, weil es nicht etwas wirken kann (was komisch ist, weil es nirgendwo 32-Bit-Ints gibt):
%Vor%Eine Problemumgehung , die korrekte Ergebnisse zurückgibt, ist
%Vor% Aber das ist aus verschiedenen Gründen nicht möglich. Ich möchte insbesondere nicht alle Spalten in der Abfrage auflisten, noch möchte ich den Sonderfall parent_id
einführen.
Das Verwenden von Dapper und das manuelle Mappen funktioniert nicht gut mit der ursprünglichen Abfrage, das gilt natürlich auch für das sqlite CLI.
Also, wie kann ich Dapper dazu bringen, die richtigen Einträge zu akzeptieren und zuzuordnen?
Bearbeiten: Ich verwende Dapper 1.50.4 und dotnet core 2.0.
Pro Marc Kommentar sollte dies nicht passieren und es gibt eine Bibliothek reparieren. Das Problem wird hier verfolgt und betrifft auch andere Personen.
Wenn Sie Ihre Tabelle mit "INTEGER" erstellen, erstellt Sqlite int32, aber Sie haben eine lange in Ihrem Modell, ich denke, dies ist die ungültige Cast-Ausnahme, BigInt würde verwendet werden, um eine lange geben.
Sie sollten also Ihre Anfrage entweder ändern:
%Vor%Oder verwenden Sie ein Modell, das Ihrer Anfrage entspricht:
%Vor%Ich denke, Ihre Anfrage mit "IFNULL (parent_id, 0)" funktioniert, weil sie einen Cast enthält, da 0 als int32 betrachtet werden kann.
Versuche dies mit dieser Klasse, es sollte funktionieren
%Vor%Aktualisieren
versuche es mit
%Vor%weil das dein Fehler ist
%Vor%, wenn dieser Fehler bedeutet, dass es nicht in int32 in int64 konvertiert werden kann, ist es zu diesem Zeitpunkt besser, den Typ der Basisdaten zu ändern