5

Ich kann nicht SQLite Treiber in meiner Sessionfactory arbeiten.FluentNhibernate und SQLite

ich heruntergeladen SQLite 1.0.48 von http://sqlite.phxsoftware.com/

Ich habe die Hinweise auf System.Data.SQLite in meinen Tests Projekt hinzugefügt. Diese

public static IPersistenceConfigurer GetSqlLiteConfigurer() 
     { 
      try 
      { 
       return SQLiteConfiguration 
       .Standard 
       .InMemory(); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 

ist, wie ich den Projekteur erzeugen

Das Problem ist, wenn ich meine Session bauen bekomme ich folgende Fehlermeldung:

NHibernate.HibernateException: The IDbCommand and IDbConnection implementation in the assembly System.Data.SQLite could not be found. Ensure that the assembly System.Data.SQLite is located in the application directory or in the Global Assembly Cache. If the assembly is in the GAC, use <qualifyAssembly/> element in the application configuration file to specify the full name of the assembly. 
at NHibernate.Driver.ReflectionBasedDriver..ctor(String driverAssemblyName, String connectionTypeName, String commandTypeName) 
at NHibernate.Driver.SQLite20Driver..ctor() 

Ich habe versucht, von SQLite-Version zu ändern, aber nicht behebe das Problem.

Ich kann nicht finden, was das Problem ist, und ich arbeite seit 2 Tagen daran.

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen.

Danke für die Hilfe!

Charles

Antwort

7

Ich habe mein Problem behoben, indem die System.Data.SQLite.dll Datei erhalten, die im FluentNHibernate SVN Repository ist.

Dies funktioniert jetzt sehr gut.

Ich habe dies früher überprüft haben;)

+0

Dank. Das hat das Problem für mich gelöst. – statenjason

+0

Jetzt verfügbar als NuGet Package http: // nuget.org/List/Packages/SQLitex64 –

10

Als ich in diese Ausgabe lief es Prozessor Eigenschaft Satz meiner Anwendung verursacht wurde anycpu, indem Sie mit und auf einem 64-Bit-System ausgeführt werden. Um das Problem zu beheben, setze ich meine Anwendungsprozessoreigenschaft auf x86. Ich glaube nicht, dass die System.Data.SQLite.dll unterstützt unter einem x64-Prozess läuft.

+2

System.Data.SQLite.dll * ist * für x64 verfügbar, es ist nur eine andere Assembly (die im x64-Verzeichnis enthalten ist) –

+0

+1 das hat das Problem für mich gelöst (sogar mit der x64 dll von SQLite schien nicht zu funktionieren) – Ben

+0

arbeitete für mich auch – Kevin

0

Ich habe das gleiche Problem auf einer Build-Maschine. Es funktioniert einwandfrei, wenn ich das Projekt mit Visual Studio öffne, aber wenn ich MStest.exe ausführe, schlägt es mit dem obigen Fehler fehl. Es schlägt auch auf meiner lokalen Entwicklungsmaschine fehl, wenn ich durch Befehlszeile laufe. Process Monitor zeigt keine Versuche, die Datei selbst nach mstest.exe zu suchen.

Die Build-Maschine ist 32-Bit, meine lokale Maschine ist 64-Bit. Die Baugruppe, die wir verwenden, ist diejenige aus dem Fluent NHibernate Kofferraum.

UPDATE: Es wurde herausgefunden - mstest.exe kopierte nicht alle Assemblys, wenn es über die Befehlszeile ausgeführt wurde. Ich habe die Datei localetstrun.config aktualisiert, um sie unter Bereitstellung zu integrieren. Nicht sicher, warum sich das Verhalten von dem IDE- und dem Befehlszeilen-Test-Runner unterscheidet.

+0

Hallo, ich habe das genaue Problem ! Meine Build-Maschine ist auch 64-Bit, das ist der einzige Unterschied. Meine Tests schlagen fehl, wenn sie lokal über die Befehlszeile ausgeführt werden, aber von VS aus durchgeführt werden. Wie hast du das bitte repariert? Was meinst du mit "Ich habe die Datei localetstrun.config aktualisiert, um sie unter Bereitstellung zu integrieren" und wie mache ich das bitte? – iamserious

+0

@iamserious Wenn ich mich erinnere, wurden nicht alle benötigten Baugruppen kopiert. Mithilfe der Bereitstellungseinstellungen in der Testlaufkonfiguration können Sie sicherstellen, dass alle erforderlichen Bits zur Ausführung vorhanden sind. –

+0

Colin, okay, danke! – iamserious

1

Überprüfen Sie, ob Sie 4.0 als Zielframework verwenden. Der ADO-Treiber unterstützt derzeit (1.0.66) nur 3.5.

Verwandte Themen