Ho creato un sito Web ASP.NET MVC utilizzando .NET Core 2.2 utilizzando un database SQLite. Finora funziona bene. I problemi iniziano quando voglio aggiungere parole chiave specifiche di SQLite alla stringa di connessione, ad esempio
Data Source=~\\App_Data\\MyDb.db; Version=3; DateTimeFormat=UnixEpoch; DateTimeKind=Utc
Adesso capisco
Parola chiave non supportata: "versione"
Registro il database in questo modo
// ConfigureServices(IServiceCollection services)
var conn = Configuration.GetConnectionString("MyDB").Replace("~", _env.ContentRootPath);
services.AddDbContext<MyDBContext>(options => options.UseSqlite(conn));
Quindi MyDBContext ha
public partial class MyDBContext : DbContext
{
public MyDBContext() { }
public SatrimonoContext(DbContextOptions<MyDBContext> options)
: base(options) { }
public virtual DbSet<Book> Book { get; set; }
}
Quindi lo uso nella mia pagina Modello
private SatrimonoContext _db;
public BookAccuracyListModel(SatrimonoContext dbContext)
{
_db = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
}
e da lì posso accedere a _db normalmente tramite LINQ.
Prima di pubblicare qui, ho fatto molte ricerche sull'argomento e le migliori risposte che ho trovato sono state queste
Questo provider è Microsoft.Data.Sqlite. Tali stringhe di connessione sono per System.Data.SQLite.
Supportiamo le seguenti parole chiave: cache, origine dati, modalità.
e questo
Il problema che stavo riscontrando era perché stavo cercando di creare un SqlConnection anziché un SQLiteConnection. Apportare questa modifica ha risolto il mio problema.
Tuttavia, se lo sto facendo "giusto", non sto creando SqlConnection e quindi non posso cambiarlo in SQLiteConnection. L'altra risposta non include una soluzione.
Quindi, come faccio a farlo funzionare nel modo giusto?
C'è un thread in Github per quanto riguarda il problema.
Microsoft.Data.Sqlite
supporta solo tre parole chiave:
Non sono supportate altre parole chiave per questo spazio dei nomi, tuttavia se si utilizzano le parole chiave menzionate con lo spazio dei nomi System.Data.SQLite
, funzionerà, poiché sono parole chiave abbinate per System.Data.SQLite
.
Le tue due opzioni:
Version=3
o qualsiasi altra parola chiave non supportata dalla stringa di connessione Espandendo la risposta di Barr, la soluzione è aggiungere System.Data.SQLite.Core al progetto.
Quindi sostituire
var conn = Configuration.GetConnectionString("Satrimono").Replace("~", _env.ContentRootPath);
services.AddDbContext<SatrimonoContext>(options => options.UseSqlite(conn));
con
var connString = Configuration.GetConnectionString("Satrimono").Replace("~", _env.ContentRootPath);
var conn = new SQLiteConnection(connString);
services.AddDbContext<SatrimonoContext>(options => options.UseSqlite(conn));
Questo è tutto!