SQLite.net SQLiteFunction funktioniert nicht in Linq to SQL

8

Ich habe eine Handvoll von benutzerdefinierten SQLite-Funktionen in C # mit System.Data.SQLite.SQLiteFunction erstellt. Es funktioniert hervorragend, wenn SQLiteDataAdapter zum Ausführen von Abfragen verwendet wird, es funktioniert jedoch nicht, wenn ich Linq to SQL verwende, bekomme ich Fehler, die besagen, dass die Funktion nicht existiert .

Ich schätze, die Schlussfolgerung lautet: Wie kann ich Custom SQLiteFunctions in Linq to SQL verwenden? Entweder, indem man sie so lädt, wie sie sollen oder indem man den Quellcode von SQLite.Net so dass sie Teil der DLL sind?

Hinweis: Ich verstehe Entity Framework ist bevorzugt, dies ist Legacy-Anwendung, und ich habe nicht die Option, dies zu ändern. Ich habe versucht, die Funktionen manuell an die DataContext.Connection zu binden, keine Würfel.

Hintergrund zu einem Versuch, System.Data.SQLite zu ändern: Ich habe versucht, den Quellcode herunterzuladen, kann ich erfolgreich aus der Quelle erstellen, aber der Quellcode ist ein wenig rätselhaft für mich.

  • Im Projekt System.Data.SQLite.2012 sind keine Dateien im Projekt enthalten, aber alle Quelldateien sind im tatsächlichen Ordner vorhanden. Sie scheinen in der Lösung in einer Datei namens System.Data.SQLite.Files.targets enthalten zu sein. Das ist eine seltsame Einstellung für mich.
  • Ich habe meine benutzerdefinierten Funktionen dem Projektordner hinzugefügt, sie aber nicht wie alle anderen Dateien in das Projekt aufgenommen. Ich habe sie dann zu System.Data.SQLite.Files.targets hinzugefügt.
  • Ich habe die Lösung erstellt und sie erscheinen in der Baugruppe. Obwohl ich scheinbar Dateien zur Assembly hinzufügen und erstellen kann, scheint die Änderung des vorhandenen Codes keine Auswirkungen zu haben.
  • Ich ging in die SQLiteConnection-Klasse und fügte eine neue Exception in der Open-Methode hinzu. Ich habe Console.Writeline an Schlüsselstellen hinzugefügt. Nichts, was ich im vorhandenen Code ändere, scheint in die kompilierte Assembly zu gelangen.

Das Ziel davon war, zu versuchen, meine benutzerdefinierten Funktionen in der System.Data.SQLite.dll zu bauen, anstatt sich auf das automatische Laden durch Reflektion zu verlassen.

    
Matthew McClaskey 15.06.2014, 12:53
quelle

1 Antwort

19

Gerade in diesem Moment fand ich diesen netten Ausschnitt von dieser Frage

%Vor%

Aber ich habe nicht herausgefunden, wie man es benutzt. Jetzt gibt es eine SQLiteConnection.BindFunction-Methode. Es ist hässlich, also habe ich eine kleine Erweiterungsmethode gemacht:

%Vor%

Und jetzt müssen Sie nur

%Vor%

Nun, wie Sie es in LINQ to SQL tun können, weiß ich nicht genau, weil ich meine eigene SQL in LINQ IQueryProvider habe. Dies können Sie mit den grundlegenden IDbConnection-, IDbCommand-, IDbDataParameter- und IDataReader-Schnittstellen und Ihrer benutzerdefinierten SQLiteFunction tun.

    
metadings 02.10.2014 06:16
quelle