Övning: Lagra data lokalt med SQLite
I den här övningen använder du SQLite för att lagra information lokalt med ett program. I exempelscenariot bestämde du dig för att cachelagrat data för appen för sociala medier för att förbättra svarstiden. Den här övningen skapar och använder en lokal SQLite-databas för att lagra information om personer. Du sparar den fysiska databasfilen i lokal lagring.
I den här modulen används .NET 9.0 SDK. Kontrollera att du har .NET 9.0 installerat genom att köra följande kommando i önskad kommandoterminal:
dotnet --list-sdks
Utdata som liknar följande exempel visas:
8.0.100 [C:\Program Files\dotnet\sdk]
9.0.100 [C:\Program Files\dotnet\sdk]
Kontrollera att en version som börjar med 9
visas. Om inget visas eller om kommandot inte hittas installerar du den senaste .NET 9.0 SDK:t.
Öppna startlösningen
Klona eller ladda ned övningsrepo.
Kommentar
Det är bäst att klona träningsinnehållet till en kort mappsökväg, till exempel C:\dev, för att undvika att bygggenererade filer överskrider den maximala sökvägslängden.
Använd Visual Studio för att öppna den People.sln lösningen, som du hittar i >People, eller startmappen i Visual Studio Code.
Kommentar
Försök inte köra programmet ännu, koden är ofullständig och genererar undantag tills du lägger till de element som saknas senare i den här övningen.
Definiera en SQLite-entitet
Öppna filen Person.cs i mappen Modeller .
Lägg till en
int
egenskap som heterId
tillPerson
klassen.Lägg till en
string
egenskap med namnetName
. Klassen bör se ut så här:namespace People.Models; public class Person { public int Id { get; set; } public string Name { get; set; } }
Spara filen Person.cs .
Lägg till SQLite-biblioteket
Högerklicka på projektnoden Personer från Solution Explorer i Visual Studio.
I snabbmenyn som visas väljer du Hantera NuGet-paket.
Sök efter och välj sqlite-net-pcl och välj sedan Installera.
Om du använder Visual Studio Code öppnar du terminalen och dessa paket med följande kommandon:
dotnet add package sqlite-net-pcl
Lägga till SQLite-attribut
I filen Person.cs lägger du till ett
using
direktiv förSQLite
namnområdet i filen förPerson
klassen. Med det här direktivet kan du använda attributen SQLite.using SQLite; namespace People.Models; public class Person { ... }
Kommentera
Person
klassen med[Table]
attributet och ange tabellnamnet sompeople
.Ange egenskapen
Id
som primärnyckel. Kommentera den med attributen[PrimaryKey]
och[AutoIncrement]
.Lägg till anteckningar i egenskapen
Name
. Ange dessMaxLength
som 250. Ange att varje värde i kolumnen ska varaUnique
.Den slutförda klassen bör se ut så här:
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; } }
Spara filen Person.cs .
Ansluta till databasen
Öppna filen PersonRepository.cs .
Undersök
PersonRepository
klassen. Den här klassen innehåller ofullständig skelettkod medTODO
markörer där du lägger till funktionerna för att komma åt databasen.Lägg till ett
using
direktiv förSQLite
namnrymderna ochPeople.Models
i filen förPersonRepository.cs
klassen.Lägg till ett privat
SQLiteConnection
fält med namnetconn
i klassen ovanförInit
funktionen.I funktionen
Init
kontrollerar du omconn
inte är lika mednull
. I så fall returnerar du omedelbart.if (conn != null) return;
På så sätt körs initieringskoden för SQLite-databasen bara en gång.
Initiera fältet
conn
för att ansluta till databasen med hjälp av variabeln_dbPath
.conn.CreateTable
Använd metoden för att skapa en tabell för att lagraPerson
data. Den slutfördaInit
funktionen bör se ut så här:using SQLite; using People.Models; ... private SQLiteConnection conn; ... private void Init() { if (conn != null) return; conn = new SQLiteConnection(_dbPath); conn.CreateTable<Person>(); }
Infoga en rad i databasen
Leta
PersonRepository
reda på metoden iAddNewPerson
klassen.Om du vill infoga ett nytt
Person
objekt ersätter du kommentaren i denTODO
här metoden med kod. Koden anroparInit
först för att verifiera att databasen initieras och använderSQLiteConnection
sedan objektetsInsert
-metod. Ange variabelnresult
till det värdeInsert
som metoden returnerar, enligt följande kod: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 }); ... } ... }
Hämta rader från databasen
Leta reda på
PersonRepository
metoden iGetAllPeople
klassen.Anropa
Init
för att kontrollera att databasen har initierats.Använd den allmänna
Table\<T>
metoden för att hämta alla rader i tabellen. AngePerson
som typparameter.ToList()
Använd tilläggsmetoden för att omvandla resultatet till enList\<Person>
samling och returnera den här samlingen.Lägg till felhantering genom att omsluta koden i ett
try-catch
block. Om det uppstår ett fel anger duStatusMessage
egenskapen till undantagetsMessage
egenskap och returnerar en tom samling. Den slutförda metoden bör se ut så här: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>(); }
Spara filen PersonRepository.cs .
Integrera lagringsplatsen i användargränssnittet
Öppna filen MauiProgram.cs .
CreateMauiApp
I funktionen, efter de instruktioner som lägger tillMainPage
sidan som en singleton-tjänst i appen, lägger du till kod för att utföra följande uppgifter:Skapa en strängvariabel med namnet
dbPath
. Initiera strängen med uttrycketFileAccessHelper.GetLocalFilePath("people.db3")
. Databasfilen som appen använder kallas people.db3 och appen sparar filen i lokal lagring på enheten.Använd beroendeinmatning för att lägga till
PersonRepository
klassen som en singleton-tjänst i appen. KlassenPersonRepository
exponerar en konstruktor som tar sökvägen till databasfilen som en strängparameter.
Den färdiga koden för
CreateMauiApp
funktionen bör se ut så här: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(); }
Spara filen MauiProgram.cs .
Expandera App.xaml i Solution Explorer och öppna sedan filen App.xaml.cs .
Lägg till egenskapen
public
,static
med namnetPersonRepo
. Den här egenskapen innehåller ettPersonRepository
objekt tillApp
klassen.PersonRepo
Initiera egenskapen i konstruktorn genom att lägga till enPersonRepository
parameter i konstruktorn och ange egenskapen PersonRepo till värdet i den här parametern. Den slutfördaApp
klassen bör se ut så här:public partial class App : Application { public static PersonRepository PersonRepo { get; private set; } public App(PersonRepository repo) { InitializeComponent(); PersonRepo = repo; } }
Kommentar
Beroendeinmatningsprocessen fyller automatiskt i parametern repo
till konstruktorn.
Testa programmet
Skapa lösningen med hjälp av CTRL+Skift+B.
När bygget är klart börjar du felsöka med hjälp av F5. När användargränssnittet visas anger du ditt namn och väljer Lägg till person.
Välj Hämta alla personer och kontrollera att namnet visas.
Experimentera genom att lägga till fler namn och hämta listan över lagrade personer.
Gå tillbaka till Visual Studio eller Visual Studio Code och sluta felsöka med hjälp av Skift+F5.
Starta om appen och välj Hämta alla personer. Kontrollera att de namn som du lagrade tidigare fortfarande lagras i databasen. Stäng appen när du är klar.