Latihan: Menyimpan data secara lokal dengan SQLite
Dalam latihan ini, Anda akan menggunakan SQLite untuk menyimpan informasi secara lokal dengan aplikasi. Dalam skenario sampel, Anda memutuskan untuk menyimpan data untuk aplikasi media sosial untuk meningkatkan responsivitas. Latihan ini membuat dan menggunakan database SQLite lokal untuk menyimpan informasi tentang orang. Anda akan menyimpan file database fisik di penyimpanan lokal.
Modul ini menggunakan .NET 8.0 SDK. Pastikan Anda telah menginstal .NET 8.0 dengan menjalankan perintah berikut di terminal perintah pilihan Anda:
dotnet --list-sdks
Output yang mirip dengan contoh berikut muncul:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
Pastikan bahwa versi yang dimulai dengan 8
terdaftar. Jika tidak ada yang tercantum atau perintah tidak ditemukan, instal .NET 8.0 SDK terbaru.
Membuka solusi permulaan
Klon atau unduh exercise repo.
Catatan
Yang terbaik adalah mengkloning konten latihan ke jalur folder pendek, seperti C:\dev, untuk menghindari file yang dihasilkan build melebihi panjang jalur maksimum.
Gunakan Visual Studio untuk membuka solusi Orang.sln, yang akan Anda temukan di mslearn-dotnetmaui-store-local-data> Orang, atau folder pemula di Visual Studio Code.
Catatan
Jangan mencoba dan membangun solusinya dulu. Kode tidak lengkap dan tidak akan dikompilasi sampai Anda menambahkan elemen yang hilang nanti dalam latihan ini.
Menentukan entitas SQLite
Klik kanan proyek Orang, pilih Tambahkan, lalu pilih Folder baru untuk menambahkan folder baru ke proyek. Beri nama model folder baru.
Klik kanan folder Model, pilih Tambahkan, dan pilih Kelas. Pastikan Kelas dipilih dalam daftar, lalu beri nama kelas baru Person.cs. Pilih Tambahkan.
Ubah kelas dan tandai sebagai
public
:namespace People.Models; public class Person { }
Tambahkan properti yang
int
dipanggilId
kePerson
kelas .Tambahkan properti yang
string
disebutName
. Kelas akan terlihat seperti berikut:namespace People.Models; public class Person { public int Id { get; set; } public string Name { get; set; } }
Simpan file Person.cs.
Menambahkan pustaka SQLite
Klik kanan pada simpul proyek People dari Penjelajah Solusi di Visual Studio.
Di menu konteks yang muncul, pilih Kelola Paket NuGet.
Cari dan pilih sqlite-net-pcl, lalu pilih Instal.
Cari juga dan pilih SQLitePCLRaw.bundle_green, lalu pilih Instal.
Jika menggunakan Visual Studio Code, buka terminal dan paket ini dengan perintah berikut:
dotnet add package sqlite-net-pcl
dotnet add package SQLitePCLRaw.bundle_green
Menambahkan atribut SQLite
Dalam file Person.cs, tambahkan
using
direktif untukSQLite
namespace ke file untukPerson
kelas . Direktif ini memungkinkan Anda menggunakan atribut SQLite.using SQLite; namespace People.Models; public class Person { ... }
Anotasi
Person
kelas dengan[Table]
atribut , dan tentukan nama tabel sebagaipeople
.Tentukan
Id
properti sebagai kunci utama. Buat anotasi dengan[PrimaryKey]
atribut dan[AutoIncrement]
.Tambahkan anotasi ke
Name
properti .MaxLength
Tentukan sebagai 250. Tentukan bahwa setiap nilai dalam kolom harusUnique
.Kelas yang sudah selesai akan terlihat seperti berikut:
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; } }
Simpan file Person.cs.
Sambungkan ke database
Buka file PersonRepository.cs.
Periksa kelas.
PersonRepository
Kelas ini berisi kode kerangka yang tidak lengkap dengan penandaTODO
tempat Anda akan menambahkan fungsionalitas untuk mengakses database.Tambahkan direktif
using
untukSQLite
namespace layanan danPeople.Models
ke file untukPersonRepository.cs
kelas .Tambahkan bidang privat
SQLiteConnection
bernamaconn
ke kelas , di atasInit
fungsi .Init
Dalam fungsi , periksa untuk melihat apakahconn
tidak sama dengannull
. Jika demikian, segera tampilkan.if (conn != null) return;
Dengan cara ini, kode inisialisasi untuk database SQLite hanya berjalan sekali.
Inisialisasi bidang
conn
untuk menyambungkan ke database menggunakan_dbPath
variabel .conn.CreateTable
Gunakan metode untuk membuat tabel untuk menyimpanPerson
data. FungsiInit
yang diselesaikan akan terlihat seperti berikut:using SQLite; using People.Models; ... private SQLiteConnection conn; ... private void Init() { if (conn != null) return; conn = new SQLiteConnection(_dbPath); conn.CreateTable<Person>(); }
Menyisipkan baris ke dalam database
Di
PersonRepository
kelas, temukanAddNewPerson
metode .TODO
Ganti komentar dalam metode ini dengan kode untuk menyisipkan objek baruPerson
. Kode pertama kali memanggilInit
untuk memverifikasi database diinisialisasi, lalu menggunakanSQLiteConnection
metode objekInsert
. Aturresult
variabel ke nilai yangInsert
dikembalikan metode, seperti yang ditunjukkan dalam kode berikut: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 }); ... } ... }
Mengambil baris dari database
PersonRepository
Di kelas , temukan metode .GetAllPeople
Panggil
Init
untuk memverifikasi bahwa database telah diinisialisasi.Gunakan metode generik
Table\<T>
untuk mengambil semua baris dalam tabel. TentukanPerson
sebagai parameter jenis.ToList()
Gunakan metode ekstensi untuk mengubah hasilnya menjadiList\<Person>
koleksi dan mengembalikan koleksi ini.Tambahkan penanganan kesalahan dengan mengemas kode Anda dalam blok
try-catch
. Jika ada kesalahan, aturStatusMessage
properti ke properti pengecualianMessage
dan kembalikan koleksi kosong. Metode lengkapnya akan terlihat seperti ini: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>(); }
Simpan file PersonRepository.cs.
Mengintegrasikan repositori ke dalam UI
Buka file MauiProgram.cs.
CreateMauiApp
Dalam fungsi , setelah pernyataan yang menambahkanMainPage
halaman sebagai layanan singleton ke aplikasi, tambahkan kode untuk melakukan tugas berikut:Buat variabel string bernama
dbPath
. Mulai inisialisasi string ini dengan ekspresiFileAccessHelper.GetLocalFilePath("people.db3")
. File database yang digunakan aplikasi akan disebut people.db3, dan aplikasi akan menyimpan file ini di penyimpanan lokal pada perangkat.Gunakan injeksi dependensi untuk menambahkan kelas
PersonRepository
sebagai layanan database tunggal ke aplikasi. KelasPersonRepository
mengekspos konstruktor yang mengambil jalur ke file database sebagai parameter string.
Kode yang telah selesai untuk
CreateMauiApp
fungsi akan terlihat seperti ini: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(); }
Simpan file MauiProgram.cs.
Perluas App.xaml di Penjelajah Solusi, lalu buka file App.xaml.cs.
Tambahkan properti ,
static
yangpublic
dipanggilPersonRepo
untuk menyimpanPersonRepository
objek keApp
kelas .Inisialisasi
PersonRepo
properti di konstruktor dengan menambahkanPersonRepository
parameter ke konstruktor dan mengatur properti 'PersonRepo' ke nilai dalam parameter ini. Kelas yang telah selesaiApp
akan terlihat seperti ini:public partial class App : Application { public static PersonRepository PersonRepo { get; private set; } public App(PersonRepository repo) { InitializeComponent(); MainPage = new AppShell(); PersonRepo = repo; } }
Catatan
Proses injeksi dependensi secara otomatis mengisi repo
parameter ke konstruktor.
Uji aplikasi
Buat solusi dengan menggunakan CTRL+Shift+B dan mulai penelusuran kesalahan dengan menggunakan F5. Saat UI muncul, masukkan nama Anda dan pilih Tambahkan Orang.
Pilih Dapatkan Semua Orang dan verifikasi bahwa nama Anda muncul.
Bereksperimenlah dengan menambahkan lebih banyak nama dan mengambil daftar orang yang disimpan.
Kembali ke Visual Studio atau Visual Studio Code dan hentikan penelusuran kesalahan dengan menggunakan Shift+F5.
Mulai ulang aplikasi dan pilih Dapatkan Semua Orang. Verifikasi bahwa nama yang Anda simpan sebelumnya masih tersimpan di database. Tutup aplikasi saat Anda selesai.