Entity Framework
Entity Framework con SQLite
Ricerca…
introduzione
SQLite è un database SQL transazionale e indipendente dal server. Può essere utilizzato all'interno di un'applicazione .NET utilizzando sia una libreria SQLite .NET disponibile gratuitamente sia un provider SQLite di Entity Framework. Questo argomento riguarda l'installazione e l'utilizzo del provider SQLite di Entity Framework.
Impostazione di un progetto per utilizzare Entity Framework con un provider SQLite
La libreria Entity Framework viene fornita solo con un provider SQL Server. Per utilizzare SQLite saranno necessarie dipendenze aggiuntive e configurazione. Tutte le dipendenze richieste sono disponibili su NuGet.
Installa librerie gestite SQLite
È possibile installare tutte le dipendenze modificate utilizzando la console NuGet Package Manager. Esegui il comando Install-Package System.Data.SQLite
.
Come mostrato sopra, durante l'installazione di System.Data.SQLite
, tutte le relative librerie gestite vengono installate con esso. Ciò include System.Data.SQLite.EF6
, il provider EF per SQLite. Il progetto ora fa riferimento anche agli assembly necessari per utilizzare il provider SQLite.
Inclusa libreria non gestita
Le librerie gestite da SQLite dipendono da un assembly non gestito denominato SQLite.Interop.dll
. È incluso negli assembly del pacchetto scaricati con il pacchetto SQLite e viene copiato automaticamente nella directory di build quando si crea il progetto. Tuttavia, poiché non è gestito, non sarà incluso nel tuo elenco di riferimento. Ma tenete presente che questo assembly viene distribuito per lo più con l'applicazione per gli assembly SQLite.
Nota: questo assembly dipende dal bit, il che significa che è necessario includere un assembly specifico per ciascun bitness che si intende supportare (x86 / x64).
Modifica del file App.config del progetto
Il file app.config
richiederà alcune modifiche prima che SQLite possa essere utilizzato come un provider di Entity Framework.
Correzioni richieste
Quando si installa il pacchetto, il file app.config
viene automaticamente aggiornato per includere le voci necessarie per SQLite e SQLite EF. Sfortunatamente queste voci contengono alcuni errori. Devono essere modificati prima che funzioni correttamente.
Innanzitutto, individuare l'elemento DbProviderFactories
nel file di configurazione. È all'interno dell'elemento system.data
e conterrà quanto segue
<DbProviderFactories>
<remove invariant="System.Data.SQLite.EF6" />
<add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" />
<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>
Questo può essere semplificato per contenere una singola voce
<DbProviderFactories>
<add name="SQLite Data Provider" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
</DbProviderFactories>
Con questo, abbiamo specificato che i fornitori di SQLite EF6 dovrebbero utilizzare la fabbrica SQLite.
Aggiungi una stringa di connessione SQLite
Le stringhe di connessione possono essere aggiunte al file di configurazione all'interno dell'elemento root. Aggiungi una stringa di connessione per accedere a un database SQLite.
<connectionStrings>
<add name="TestContext" connectionString="data source=testdb.sqlite;initial catalog=Test;App=EntityFramework;" providerName="System.Data.SQLite.EF6"/>
</connectionStrings>
La cosa importante da notare qui è il provider
. È stato impostato su System.Data.SQLite.EF6
. Questo dice a EF che quando usiamo questa stringa di connessione, vogliamo usare SQLite. L' data source
specificata è solo un esempio e dipenderà dalla posizione e dal nome del database SQLite.
Il tuo primo DbContext SQLite
Completata l'installazione e la configurazione, ora puoi iniziare a utilizzare un DbContext
che funzionerà sul tuo database SQLite.
public class TestContext : DbContext
{
public TestContext()
: base("name=TestContext") { }
}
Specificando name=TestContext
, ho indicato che la stringa di connessione TestContext che si trova nel file app.config
dovrebbe essere utilizzata per creare il contesto. Quella stringa di connessione è stata configurata per utilizzare SQLite, quindi questo contesto utilizzerà un database SQLite.