Oefening: Gegevens lokaal opslaan met SQLite
In deze oefening gebruikt u SQLite om gegevens lokaal op te slaan met een toepassing. In het voorbeeldscenario hebt u besloten om gegevens voor de sociale media-app in de cache op te cachen om de reactiesnelheid te verbeteren. In deze oefening maakt en gebruikt u een lokale SQLite-database voor het opslaan van informatie over personen. U slaat het fysieke databasebestand op in de lokale opslag.
In deze module wordt de .NET 9.0 SDK gebruikt. Zorg ervoor dat .NET 9.0 is geïnstalleerd door de volgende opdracht uit te voeren in de opdrachtterminal van uw voorkeur:
dotnet --list-sdks
Uitvoer die vergelijkbaar is met het volgende voorbeeld wordt weergegeven:
8.0.100 [C:\Program Files\dotnet\sdk]
9.0.100 [C:\Program Files\dotnet\sdk]
Zorg ervoor dat er een versie wordt vermeld die begint met 9
. Als er geen wordt vermeld of de opdracht niet wordt gevonden, installeert u de meest recente .NET 9.0 SDK.
Open de startersoplossing
Kloon of download de oefeningsopslagplaats.
Notitie
Het is raadzaam om de inhoud van de oefening te klonen naar een kort mappad, zoals C:\dev, om te voorkomen dat door build gegenereerde bestanden de maximale padlengte overschrijden.
Gebruik Visual Studio om de People.sln-oplossing te openen, die u vindt in mslearn-dotnetmaui-store-local-data> of de startersmap in Visual Studio Code.
Notitie
Probeer de toepassing nog niet uit te voeren. De code is onvolledig en genereert uitzonderingen totdat u de ontbrekende elementen verderop in deze oefening toevoegt.
Een SQLite-entiteit definiëren
Open het bestand Person.cs in de map Modellen .
Voeg een
int
eigenschap toe die aangeroepen isId
aan dePerson
klasse.Voeg een
string
eigenschap toe met de naamName
. De klasse moet er als volgt uitzien:namespace People.Models; public class Person { public int Id { get; set; } public string Name { get; set; } }
Sla het Person.cs bestand op.
De SQLite-bibliotheek toevoegen
Klik met de rechtermuisknop op het projectknooppunt Personen vanuit Solution Explorer in Visual Studio.
Selecteer NuGet-pakketten beheren in het contextmenu dat wordt weergegeven.
Zoek en selecteer sqlite-net-pcl en selecteer vervolgens Installeren.
Als u Visual Studio Code gebruikt, opent u de terminal en deze pakketten met de volgende opdrachten:
dotnet add package sqlite-net-pcl
SQLite-kenmerken toevoegen
Voeg in het bestand Person.cs een
using
instructie voor deSQLite
naamruimte toe aan het bestand voor dePerson
klasse. Met deze instructie kunt u de SQLite-kenmerken gebruiken.using SQLite; namespace People.Models; public class Person { ... }
Aantekeningen toevoegen aan de
Person
klasse met het[Table]
kenmerk en de tabelnaam opgeven alspeople
.Geef de
Id
eigenschap op als de primaire sleutel. Aantekeningen maken met de[PrimaryKey]
en[AutoIncrement]
kenmerken.Aantekeningen toevoegen aan de
Name
eigenschap. Geef de waardeMaxLength
op als 250. Geef op dat elke waarde in de kolom moet zijnUnique
.De voltooide klasse moet er als volgt uitzien:
using SQLite; namespace People.Models; [Table("people")] public class Person { [PrimaryKey, AutoIncrement] public int Id { get; set; } [MaxLength(250), Unique] public string Name { get; set; } }
Sla het Person.cs bestand op.
Verbinding maken met de database
Open het PersonRepository.cs bestand.
Bekijk de
PersonRepository
klas. Deze klasse bevat onvolledige basiscode metTODO
markeringen waar u de functionaliteit toevoegt voor toegang tot de database.Voeg een
using
instructie toe voor deSQLite
enPeople.Models
naamruimten aan het bestand voor dePersonRepository.cs
klasse.Voeg een privéveld
SQLiteConnection
toe aanconn
de klasse, boven deInit
functie.Controleer in de
Init
functie ofconn
deze niet gelijk is aannull
. Zo ja, dan keert u onmiddellijk terug.if (conn != null) return;
Op deze manier wordt de initialisatiecode voor de SQLite-database slechts eenmaal uitgevoerd.
Initialiseer het
conn
veld om verbinding te maken met de database met behulp van de_dbPath
variabele.Gebruik de
conn.CreateTable
methode om een tabel te maken om gegevens op te slaanPerson
. De voltooideInit
functie moet er als volgt uitzien:using SQLite; using People.Models; ... private SQLiteConnection conn; ... private void Init() { if (conn != null) return; conn = new SQLiteConnection(_dbPath); conn.CreateTable<Person>(); }
Een rij invoegen in de database
Zoek
PersonRepository
in de klasse deAddNewPerson
methode.Als u een nieuw
Person
object wilt invoegen, vervangt u deTODO
opmerking in deze methode door code. De code roeptInit
eerst aan om te controleren of de database is geïnitialiseerd en gebruikt vervolgens de methode vanSQLiteConnection
hetInsert
object. Stel deresult
variabele in op de waarde die door deInsert
methode wordt geretourneerd, zoals wordt weergegeven in de volgende code:public void AddNewPerson(string name) { int result = 0; try { // enter this line Init(); // basic validation to ensure a name was entered if (string.IsNullOrEmpty(name)) throw new Exception("Valid name required"); // enter this line result = conn.Insert(new Person { Name = name }); ... } ... }
Rijen ophalen uit de database
Zoek de
PersonRepository
methode in deGetAllPeople
klasse.Aanroep
Init
om te controleren of de database is geïnitialiseerd.Gebruik de algemene
Table\<T>
methode om alle rijen in de tabel op te halen. GeefPerson
op als de typeparameter.Gebruik de
ToList()
extensiemethode om het resultaat om te zetten in eenList\<Person>
verzameling en deze verzameling te retourneren.Voeg foutafhandeling toe door uw code in een
try-catch
blok te verpakken. Als er een fout optreedt, stelt u deStatusMessage
eigenschap in op de eigenschap vanMessage
de uitzondering en retourneert u een lege verzameling. De voltooide methode moet er als volgt uitzien:public List<Person> GetAllPeople() { try { Init(); return conn.Table<Person>().ToList(); } catch (Exception ex) { StatusMessage = string.Format("Failed to retrieve data. {0}", ex.Message); } return new List<Person>(); }
Sla het PersonRepository.cs bestand op.
De opslagplaats integreren in de gebruikersinterface
Open het bestand MauiProgram.cs .
Voeg in de
CreateMauiApp
functie, na de instructies die deMainPage
pagina als een singleton-service aan de app toevoegen, code toe om de volgende taken uit te voeren:Maak een tekenreeksvariabele met de naam
dbPath
. Initialiseer deze tekenreeks met de expressieFileAccessHelper.GetLocalFilePath("people.db3")
. Het databasebestand dat door de app wordt gebruikt, heet people.db3 en de app slaat dit bestand op in de lokale opslag op het apparaat.Gebruik afhankelijkheidsinjectie om de
PersonRepository
klasse als een singleton-service toe te voegen aan de app. DePersonRepository
klasse maakt een constructor beschikbaar die het pad naar het databasebestand als een tekenreeksparameter gebruikt.
De voltooide code voor de
CreateMauiApp
functie moet er als volgt uitzien:public static MauiApp CreateMauiApp() { var builder = MauiApp.CreateBuilder(); builder .UseMauiApp<App>() .ConfigureFonts(fonts => { fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular"); fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold"); }); // Add this code string dbPath = FileAccessHelper.GetLocalFilePath("people.db3"); builder.Services.AddSingleton<PersonRepository>(s => ActivatorUtilities.CreateInstance<PersonRepository>(s, dbPath)); return builder.Build(); }
Sla het MauiProgram.cs bestand op.
Vouw App.xaml uit in Solution Explorer en open het bestand App.xaml.cs .
Voeg een
public
eigenschap toestatic
met de naamPersonRepo
. Deze eigenschap bevat eenPersonRepository
object voor deApp
klasse.Initialiseer de
PersonRepo
eigenschap in de constructor door eenPersonRepository
parameter toe te voegen aan de constructor en de eigenschap PersonRepo in te stellen op de waarde in deze parameter. De voltooideApp
klasse moet er als volgt uitzien:public partial class App : Application { public static PersonRepository PersonRepo { get; private set; } public App(PersonRepository repo) { InitializeComponent(); PersonRepo = repo; } }
Notitie
Het afhankelijkheidsinjectieproces vult de repo
parameter automatisch in voor de constructor.
De toepassing testen
Bouw de oplossing met Ctrl+Shift+B.
Zodra de build is voltooid, begint u met het opsporen van fouten met F5. Wanneer de gebruikersinterface wordt weergegeven, voert u uw naam in en selecteert u Persoon toevoegen.
Selecteer Alle personen ophalen en controleer of uw naam wordt weergegeven.
Experimenteer door meer namen toe te voegen en de lijst met opgeslagen personen op te halen.
Ga terug naar Visual Studio of Visual Studio Code en stop de foutopsporing met behulp van Shift+F5.
Start de app opnieuw op en selecteer Alle personen ophalen. Controleer of de namen die u eerder hebt opgeslagen, nog steeds zijn opgeslagen in de database. Sluit de app wanneer u klaar bent.