Cvičení: Místní ukládání dat pomocí SQLite
V tomto cvičení použijete SQLite k místnímu ukládání informací s aplikací. V ukázkovém scénáři jste se rozhodli ukládat data do mezipaměti pro aplikaci sociálních médií, abyste zlepšili rychlost odezvy. Toto cvičení vytvoří a použije místní databázi SQLite k ukládání informací o lidech. Soubor fyzické databáze uložíte v místním úložišti.
Tento modul používá sadu .NET 9.0 SDK. Spuštěním následujícího příkazu v upřednostňovaném příkazovém terminálu se ujistěte, že máte nainstalované rozhraní .NET 9.0:
dotnet --list-sdks
Zobrazí se výstup podobný následujícímu příkladu:
8.0.100 [C:\Program Files\dotnet\sdk]
9.0.100 [C:\Program Files\dotnet\sdk]
Ujistěte se, že je uvedená verze, na 9
které začíná. Pokud žádný není uvedený nebo příkaz nebyl nalezen, nainstalujte nejnovější sadu .NET 9.0 SDK.
Otevření úvodního řešení
Naklonujte nebo stáhněte úložiště cvičení.
Poznámka:
Nejlepší je naklonovat obsah cvičení do krátké cesty ke složce, jako je C:\dev, aby se zabránilo překročení maximální délky cesty vygenerovaných sestavením.
V sadě Visual Studio otevřete řešení People.sln, které najdete v mslearn-dotnetmaui-store-local-data>People, nebo v úvodní složce v editoru Visual Studio Code.
Poznámka:
Zatím nepokoušejte spustit aplikaci, kód je neúplný a vyvolá výjimky, dokud nepřidáte chybějící prvky později v tomto cvičení.
Definování entity SQLite
Otevřete soubor Person.cs ve složce Models.
Přidejte do třídy volanou
int
Id
Person
vlastnost.string
Přidejte vlastnost s názvemName
. Třída by měla vypadat takto:namespace People.Models; public class Person { public int Id { get; set; } public string Name { get; set; } }
Uložte soubor Person.cs.
Přidání knihovny SQLite
Klikněte pravým tlačítkem myši na uzel projektu Lidé z Průzkumník řešení v sadě Visual Studio.
V místní nabídce, která se zobrazí, vyberte Spravovat balíčky NuGet.
Vyhledejte a vyberte sqlite-net-pcl a pak vyberte Nainstalovat.
Pokud používáte Visual Studio Code, otevřete terminál a tyto balíčky pomocí následujících příkazů:
dotnet add package sqlite-net-pcl
Přidání atributů SQLite
Do souboru Person.cs přidejte direktivu
using
SQLite
oboru názvů do souboru třídyPerson
. Tato direktiva umožňuje používat atributy SQLite.using SQLite; namespace People.Models; public class Person { ... }
Označte
Person
třídu atributem[Table]
a zadejte název tabulky jakopeople
.Id
Zadejte vlastnost jako primární klíč. Označte ji poznámkami[PrimaryKey]
a[AutoIncrement]
atributy.Přidejte do
Name
vlastnosti poznámky. Zadejte jehoMaxLength
hodnotu 250. Určete, že každá hodnota ve sloupci by měla býtUnique
.Dokončená třída by měla vypadat takto:
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; } }
Uložte soubor Person.cs.
Připojte se k databázi.
Otevřete soubor PersonRepository.cs.
PersonRepository
Prozkoumejte třídu. Tato třída obsahuje neúplný kostru kódu seTODO
značkami, do kterých přidáte funkce pro přístup k databázi.Přidejte direktivu
using
pro oborySQLite
názvů aPeople.Models
obory názvů do souboru proPersonRepository.cs
třídu.Nad funkci přidejte soukromé
SQLiteConnection
pole pojmenovanéconn
do třídyInit
.Init
Ve funkci zkontrolujte, jestliconn
se nerovnánull
. Pokud ano, vraťte se okamžitě.if (conn != null) return;
Tímto způsobem se inicializační kód pro databázi SQLite spustí jenom jednou.
Inicializuje
conn
pole pro připojení k databázi pomocí_dbPath
proměnné.conn.CreateTable
Pomocí této metody vytvořte tabulku pro ukládáníPerson
dat. DokončenáInit
funkce by měla vypadat takto:using SQLite; using People.Models; ... private SQLiteConnection conn; ... private void Init() { if (conn != null) return; conn = new SQLiteConnection(_dbPath); conn.CreateTable<Person>(); }
Vložení řádku do databáze
Ve
PersonRepository
třídě vyhledejte metoduAddNewPerson
.Chcete-li vložit nový
Person
objekt, nahraďteTODO
komentář v této metodě kódem. Kód nejprve zavoláInit
k ověření inicializace databáze a pak použije metodu objektuSQLiteConnection
Insert
. Nastavte proměnnouresult
na hodnotu, kterouInsert
metoda vrátí, jak je znázorněno v následujícím kódu: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 }); ... } ... }
Načtení řádků z databáze
PersonRepository
Ve třídě vyhledejte metoduGetAllPeople
.Voláním
Init
ověřte, že je databáze inicializována.Pomocí obecné
Table\<T>
metody načtěte všechny řádky v tabulce. ZadejtePerson
jako parametr typu.ToList()
Pomocí metody rozšíření můžete výsledek převést naList\<Person>
kolekci a vrátit tuto kolekci.Přidejte zpracování chyb zabalením kódu do
try-catch
bloku. Pokud dojde k chybě, nastavteStatusMessage
vlastnost na vlastnost výjimkyMessage
a vraťte prázdnou kolekci. Dokončená metoda by měla vypadat takto: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>(); }
Uložte soubor PersonRepository.cs.
Integrace úložiště do uživatelského rozhraní
Otevřete soubor MauiProgram.cs.
CreateMauiApp
Ve funkci za příkazy, které přidávajíMainPage
stránku jako jednu službu do aplikace, přidejte kód pro provedení následujících úloh:Vytvořte řetězcovou proměnnou s názvem
dbPath
. Inicializovat tento řetězec výrazemFileAccessHelper.GetLocalFilePath("people.db3")
. Soubor databáze, který aplikace používá, se nazývá people.db3 a aplikace uloží tento soubor do místního úložiště na zařízení.Injektáž závislostí použijte k přidání
PersonRepository
třídy jako jednoúčelové služby do aplikace. TřídaPersonRepository
zveřejňuje konstruktor, který přebírá cestu k databázovému souboru jako řetězcový parametr.
Dokončený kód funkce
CreateMauiApp
by měl vypadat takto: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(); }
Uložte soubor MauiProgram.cs.
V Průzkumník řešení rozbalte App.xaml a otevřete soubor App.xaml.cs.
public
Přidejte vlastnost sstatic
názvemPersonRepo
. Tato vlastnost obsahujePersonRepository
objekt třídyApp
.Inicializace
PersonRepo
vlastnosti v konstruktoru přidánímPersonRepository
parametru do konstruktoru a nastavením vlastnosti PersonRepo na hodnotu v tomto parametru. DokončenáApp
třída by měla vypadat takto:public partial class App : Application { public static PersonRepository PersonRepo { get; private set; } public App(PersonRepository repo) { InitializeComponent(); PersonRepo = repo; } }
Poznámka:
Proces injektáže závislostí automaticky naplní repo
parametr konstruktoru.
Testování aplikace
Sestavte řešení pomocí kombinace kláves CTRL+Shift+B.
Po dokončení sestavení spusťte ladění pomocí klávesy F5. Jakmile se zobrazí uživatelské rozhraní, zadejte své jméno a vyberte Přidat osobu.
Vyberte Získat všechny lidi a ověřte, že se zobrazí vaše jméno.
Experimentujte přidáním dalších jmen a načtením seznamu uložených lidí.
Vraťte se do sady Visual Studio nebo Visual Studio Code a pomocí Shift+F5 zastavte ladění.
Restartujte aplikaci a vyberte Získat všechny lidi. Ověřte, že názvy, které jste dříve uložili, jsou stále uložené v databázi. Až budete hotovi, zavřete aplikaci.