Sei improbabile che possa essere la lettura di più questo, ma ti manca il seguente nel vostro app.config (o, per voi, web.config):
<configuration>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SQLite" />
<add name="SQLite Data Provider" invariant="System.Data.SQLite"
description=".Net Framework Data Provider for SQLite"
type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
</system.data>
</configuration>
In particolare, se siete usando sqlite in una libreria che è collegata al tuo sito web, devi aggiungerla al file di configurazione di il sito Web - non la libreria! Questo è dovuto al modo in cui si sta caricando il provider: in sostanza, si determina in fase di esecuzione quale DLL caricare, utilizzando la stringa "System.Data.SQLite" e l'individuazione del provider appropriato viene eseguita utilizzando le impostazioni della voce montaggio.
Edit: A proposito, quando si scrive la libreria che ha una dipendenza SQLite, è possibile evitare questa complessità. Non è necessario utilizzare DbProviderFactories
per cercare sqlite in fase di runtime; puoi prendere anche una dipendenza in fase di compilazione, che può essere più facile da gestire. Poi si può ignorare la sezione app.config sopra, e invece sostituire tutte le istanze di:
DbProviderFactories.GetFactory("System.Data.SQLite").CreateConnection()
con
System.Data.SQLite.SQLiteFactory.Instance.CreateConnection()
Se lo fa, si sta utilizzando una chiamata di libreria semplice per creare la connessione e non esiste una selezione runtime del provider db. Questo può essere meno flessibile in quanto non è più possibile scambiare provider di dati tramite il file di configurazione, ma per molte librerie è sufficiente. Sfortunatamente, se non controlli il codice della libreria, questa non è un'opzione.
fonte
2009-07-11 07:44:23
Ciao, grazie per una risposta. Sì, ho visto il blogpost di Phil. Posso distribuire la normale app ASP.NET MVC bene. È la combinazione con Entity Framework + SQLite che è problematica. Ho aumentato sia System.Data.Entity.dll che System.Data.SQLite.dll nella cartella bin. Ancora nessuna fortuna. – Pompair
Hmmm. Sono nella sezione delle assemblee nella configurazione Web? – tvanfosson