Konfigurieren von SQLite zu laufen mit NHibernate, wo die Versammlung aufgelöst System.Daten.SQLite?
Ich verwende die neueste NHibernate 2.1.0Beta2. Ich versuche ein unit-test mit SQLite und habe die Konfiguration eingerichtet:
Dictionary<string, string> properties = new Dictionary<string, string>();
properties.Add("connection.driver_class", "NHibernate.Driver.SQLite20Driver");
properties.Add("dialect", "NHibernate.Dialect.SQLiteDialect");
properties.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider");
properties.Add("query.substitutions", "true=1;false=0");
properties.Add("connection.connection_string", "Data Source=test.db;Version=3;New=True;");
properties.Add("proxyfactory.factory_class",
"NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu");
configuration = new Configuration();
configuration.SetProperties(properties);
Wenn ich versuche es zu starten, bekomme ich die 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) in c:\CSharp\NH\nhibernate\src\NHibernate\Driver\ReflectionBasedDriver.cs: line 26
at NHibernate.Driver.SQLite20Driver..ctor() in c:\CSharp\NH\nhibernate\src\NHibernate\Driver\SQLite20Driver.cs: line 28
So wie es aussieht muss ich auf die assembly verweisen, direkt. Wie würde ich dies tun, damit ich nicht bekommen, diese Fehler nicht mehr?
Ich heruntergeladen habe die neueste assembly von hier: http://sourceforge.net/projects/sqlite-dotnet2.
- Ist der code von sqlite-dotnet2 in der Anwendung-Verzeichnis? (oder im GAC registrierte?)
- Ich habe einen Verweis auf System.Data.SQLite.DLL in meinen Referenzen des Projekts. Ich gehe davon aus wenn ich das Gerät testen (durch Resharper unit-test-runner), kopiert er es über.
- Im Fall, dass jemand läuft in dieser Frage und ist auf der Suche nach einer aktualisierten version dieser Antwort -<br/> Der post in meinem blog über diese genaue Frage ist viel mehr aktualisiert, als die Antworten hier...<br/> http://debuggerstepthrough.blogspot.co.il/2011/08/unit-testing-fluentnhibernate.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie mit der 64-bit-Windows?
Wenn man um Google, sah ich mehrere Beiträge zu kommentieren, dass die SQLite-dll-Datei ist gebaut für x86 -, x64 nicht.
Finden Sie in diesem Beitrag: http://codetripper.wordpress.com/2009/01/03/using-sqlite-on-vista-64-bit/
Edit: ich bin mir nicht sicher ab Wann, aber ich bemerkte heute, dass die neuesten Versionen von
System.Data.SQLite
gehören die x64-dll. Die x64 .dll ist in\bin\x64
.http://sqlite.phxsoftware.com/
Nach dem hinzufügen der Referenz auf das System.Daten.SQLite-assembly, musste ich legen Sie die lokale Kopie auf true (wählen Sie die assembly-Verweis in der VS und gehen Sie zu "Eigenschaften"), so dass die Baugruppe kopiert Sie in das Verzeichnis bin.
Wenn Sie nicht möchten, zu verwenden 64-bit-version des Systems.Daten.Sqlite
Sie können sich ändern "platform target" (im visual studio-Projekt->Eigenschaften->Build) auf x86.
Ich hatte das gleiche problem und die oben genannten Lösungen nicht funktioniert für mich. Ich denke, dass System.Daten.SQLite hat sich geändert, seit.
Beachten Sie, dass dieses problem sich speziell auf einen Fall zu respektieren alle folgende Kriterien erfüllen:
Chunks der config in meinem web.config (oder in der app.config für meine unit-tests) zum laufen bekommen. Ich hatte zu qualifizieren, der Montage, um sicher zu sein, er lädt richtig.
Irgendwo im inneren Sanitär -, während der Zuordnung die Verwendung gescannter Baugruppen, NHibernate erzeugt ein Assembly-Objekt unter Verwendung Ihrer Namen teilweise, wie eine Zeichenfolge "System.Daten.SQLite". Irgendwie ist die x86-version der assembly geladen wurden.
Den oben genannten Konfiguration sicher, dass die Verwendung der partiellen Namen ein, um eine assembly zu laden würde die x64-version.