Esercizio: Usare il provider di database SQLite con EF Core
Fino a questo punto, i dati sono stati salvati in un database in memoria. Questo database è facile da configurare e usare durante lo sviluppo dell'applicazione, ma i dati non sono persistenti. Di conseguenza, i dati andranno persi al riavvio dell'applicazione. Prima di distribuire l'applicazione, è necessario rendere persistenti i dati in un database.
In questo esercizio si aggiornerà l'applicazione per usare un database relazionale per archiviare i dati. Si userà SQLite per archiviare i dati.
Configurare il database SQLite
Completare le sezioni seguenti per configurare il database SQLite.
Installare gli strumenti e i pacchetti seguenti
Nel terminale installare i pacchetti seguenti:
Provider di database SQLite EF Core: può accedere a molti database diversi tramite librerie plug-in denominate provider di database. Il pacchetto seguente è il provider di database SQLite per Entity Framework (EF) Core.
dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version 8.0Strumenti di EF Core: gli strumenti per EF Core eseguono attività di sviluppo in fase di progettazione. Ad esempio, creano migrazioni, applicano migrazioni e generano codice per un modello basato su un database esistente.
dotnet tool install --global dotnet-efMicrosoft.EntityFrameworkCore.Design: contiene tutta la logica in fase di progettazione per EF Core per creare il database.
dotnet add package Microsoft.EntityFrameworkCore.Design --version 8.0
Abilitare la creazione del database
Per abilitare la creazione del database, è necessario impostare la stringa di connessione del database. Si eseguirà quindi la migrazione del modello di dati a un database SQLite.
In Program.cs aggiungere una stringa di connessione in
var builder = WebApplication.CreateBuilder(args);.var connectionString = builder.Configuration.GetConnectionString("Pizzas") ?? "Data Source=Pizzas.db";Questo codice controlla il provider di configurazione per una stringa di connessione denominata Pizzas. Se non ne trova uno, verrà usato
Data Source=Pizzas.dbcome stringa di connessione. SQLite eseguirà il mapping di questa stringa a un file.Nella parte CRUD di questa esercitazione è stato usato un database in memoria. Ora si sostituirà il database in memoria con un database permanente.
Sostituire l'implementazione corrente del database in memoria
builder.Services.AddDbContext<PizzaDb>(options => options.UseInMemoryDatabase("items"));nei servizi di compilazione con il database SQLite indicato qui:builder.Services.AddSqlite<PizzaDb>(connectionString);Con lo strumento di migrazione di EF Core è ora possibile generare la prima migrazione,
InitialCreate. Salvare tutte le modifiche e quindi eseguire il comando seguente:dotnet ef migrations add InitialCreateEF Core crea una cartella Migrations nella directory del progetto che contiene due file con il codice che rappresenta le migrazioni del database.
Dopo aver completato la migrazione, è possibile usarla per creare il database e lo schema.
In una finestra del terminale eseguire il comando seguente
database updateper applicare le migrazioni a un database:dotnet ef database updateNella directory del progetto verrà visualizzato un file Pizzas.db appena creato.
Eseguire e testare l'applicazione
Ora che si dispone di un database di backup, le modifiche verranno mantenute.
Verifica l'applicazione come in precedenza usando dotnet run e la Swagger UI. Arrestare l'applicazione usando il comando CTRL+C . Eseguirlo di nuovo e verificare che le modifiche siano ancora persistenti in Pizzas.db.
Congratulazioni! È stato collegato un database all'API minima.