Immer Fluent NHibernate arbeiten mit SQLite
Ich bin mir sicher, dass es etwas einfaches habe ich nicht getan, aber ich versuche, Fluent NHibernate arbeiten mit Sqlite auf meinem Rechner.
Ich verwendet NuGet zum download fluent nhibernate und fügte hinzu, die folgenden Unternehmen und mapping:
public class Customer
{
public virtual string CustomerCode { get; set; }
public virtual string Name { get; set; }
}
public class CustomerMap : ClassMap<Customer>
{
public CustomerMap ()
{
Id(x => x.CustomerCode);
Map(x => x.Name);
Table("tblCustomer");
}
}
Dann folgende erste Schritte mit fließend guide habe ich folgenden code Hinzugefügt, um einen Windows-Kommando-Projekt:
class Program
{
static void Main(string[] args)
{
var sessionFactory = CreateSessionFactory();
using (var session = sessionFactory.OpenSession())
{
using (var transaction = session.BeginTransaction())
{
var customer = new Customer { CustomerCode = "123", Name = "Bob" };
session.SaveOrUpdate(customer);
transaction.Commit();
}
}
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(
SQLiteConfiguration.Standard
.UsingFile("firstProject.db")
)
.Mappings(m =>
m.FluentMappings.AddFromAssemblyOf<Program>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
private static void BuildSchema(Configuration config)
{
// delete the existing db on each run
if (File.Exists("firstProject.db"))
File.Delete("firstProject.db");
// this NHibernate tool takes a configuration (with mapping info in)
// and exports a database schema from it
new SchemaExport(config)
.Create(false, true);
}
}
Schließlich habe ich den Sqlite-dll mit NuGet.. aber ich bekomme die folgende Fehlermeldung beim Versuch das Programm laufen zu lassen:
Top-Ausnahme:
An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
Nächste Ausnahme:
Could not create the driver from NHibernate.Driver.SQLite20Driver, NHibernate, Version=3.1.0.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4.
Innersten Ausnahme:
Unable to find the requested .Net Framework Data Provider. It may not be installed.
Dies ist, wenn es beim erstellen der session factory.
Kann mir jemand helfen mit diesem? Ich verwende eine 32 bit Maschine?
Dank
Dave
Du musst angemeldet sein, um einen Kommentar abzugeben.
Benötigen Sie zwei Dinge:
System.Data.SQLite
in Ihrem Projekt.sqlite3.dll
, aber man kann auch nicht auf Verweis hinzufügen, um sqlite3.dll,, weil es ist eine nicht verwaltete dll. Einfach fügen Sie es als element zur Lösung und legen Sie es auf copy to output directory.Müssen Sie die .NET-provider für Sqlite. Laden Sie es hier http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Nach der ersten Untersuchung dachte ich, es war, weil mein System.Daten.SQLite-assembly nicht in den Speicher geladen, die Zeit, so dass ich den code zum laden der system.Daten.SQLite-assembly. Allerdings, wenn Sie die Anwendung ausführen, die echte Fehler aufgetreten:
Mixed mode assembly gebaut wird, gegen die version " v2.0.50727' der Laufzeit und kann nicht geladen werden in der 4.0-Laufzeit ohne zusätzliche Konfigurationsinformationen.
um dies zu beheben ich habe meine app.config wie folgt Aussehen:
wichtige bit wird useLegacyV2RuntimeActivationPolicy="true"
Ich hatte das gleiche problem heute, und verbringen eine Stunde nach einer Lösung zu suchen. Jedenfalls fand ich hier:
http://thelongwayback.wordpress.com/2009/11/02/fluent-nhibernate-sqlite-problem-the-idbcommand-and-idbconnection-implementation-in-the-assembly-system-data-sqlite-could-not-be-found/
Grundsätzlich müssen Sie verwenden eine ältere version von SQLite (v1.0.60) von hier:
http://sourceforge.net/projects/sqlite-dotnet2/files/
Auf einer anderen Anmerkung, ich habe den gleichen code arbeiten, gestern auf einer Maschine mit VS2010 SP1. Der gleiche code würde nicht ausgeführt heute auf einem Rechner ohne SP1. Wenn jemand eine chance bekommt, um dies zu testen, d.h., durch die Installation von VS2010 SP1, lassen Sie mich wissen, das Ergebnis bitte.
Keine der oben genannten Lösungen, oder irgendwelche anderen, die ich finden konnte im Internet, die für mich funktionieren... bis...
Hatte ich beide installieren die x64-und x86-Versionen von SQLite (pro Vadim link: http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki), speziell in dieser Reihenfolge.
Zunächst, ich installierte die 32-bit-Version vor die 64-bit-version, die nicht alles reparieren. Auf einer Laune heraus habe ich Sie deinstalliert und beides neu installiert Sie in das Gegenteil um. Jetzt funktioniert es!
Getestet hab ich das auf 2 verschiedenen Rechnern und überprüft dies war der fix für beide von Ihnen. Schrullig, aber effektiv.
Ich auch diesem problem begegnet.
Sie bemerkt, dass das starter Beispielprojekt Ziele .net framework 3.5 und die, die ich erstellt (übung, Projekt) ausgerichtet ist .net framework 4.0 client profile (Standard von vs2010).
Ich habe die target-version bis 3.5 und ich war in der Lage, auf meine übung Projekt.