Alıştırma: SQLite ile verileri yerel olarak depolama
Bu alıştırmada, bilgileri bir uygulamayla yerel olarak depolamak için SQLite kullanacaksınız. Örnek senaryoda, yanıt hızını artırmak için sosyal medya uygulamasının verilerini önbelleğe alma kararı verdiniz. Bu alıştırmada, kişiler hakkındaki bilgileri depolamak için yerel bir SQLite veritabanı oluşturulur ve kullanılır. Fiziksel veritabanı dosyasını yerel depolama alanına kaydedeceksiniz.
Bu modülde .NET 8.0 SDK kullanılır. Tercih ettiğiniz komut terminalinde aşağıdaki komutu çalıştırarak .NET 8.0'ın yüklü olduğundan emin olun:
dotnet --list-sdks
Aşağıdaki örneğe benzer bir çıkış görüntülenir:
6.0.317 [C:\Program Files\dotnet\sdk]
7.0.401 [C:\Program Files\dotnet\sdk]
8.0.100 [C:\Program Files\dotnet\sdk]
ile 8
başlayan bir sürümün listelendiğinden emin olun. Hiçbiri listelenmiyorsa veya komut bulunamazsa en son .NET 8.0 SDK'sını yükleyin.
Başlangıç çözümünü açın
Alıştırma depoyu kopyalayın veya indirin.
Dekont
Derleme tarafından oluşturulan dosyaların yol uzunluğunun üst sınırını aşmasını önlemek için alıştırma içeriğini C:\dev gibi kısa bir klasör yoluna kopyalamak en iyisidir.
mslearn-dotnetmaui-store-local-data Kişiler veya Visual Studio Code'daki starter klasöründe bulabileceğiniz Kişiler.sln çözümünü açmak için Visual Studio'yu kullanın.>
Dekont
Henüz çözümü oluşturmaya çalışmayın. Kod tamamlanmamıştır ve bu alıştırmanın devamında eksik öğeleri ekleyene kadar derlenmez.
SQLite varlığı tanımlama
projeye yeni bir klasör eklemek için Kişiler projeye sağ tıklayın, Ekle'yi ve ardından Yeni klasör'e tıklayın. Yeni klasöre Models adını verin.
Modeller klasörüne sağ tıklayın, Ekle'yi ve ardından Sınıf'ı seçin. Listede Sınıf'ın seçili olduğundan emin olun ve yeni sınıfı Person.cs olarak adlandırın. Ekle'yi seçin.
sınıfını değiştirin ve olarak
public
işaretleyin:namespace People.Models; public class Person { }
sınıfına
Person
adlıId
birint
özellik ekleyin.adlı
Name
birstring
özellik ekleyin. sınıfı şu şekilde görünmelidir:namespace People.Models; public class Person { public int Id { get; set; } public string Name { get; set; } }
Person.cs dosyasını kaydedin.
SQLite kitaplığını ekleme
Visual Studio'daki Çözüm Gezgini Kişiler proje düğümüne sağ tıklayın.
Görüntülenen bağlam menüsünde NuGet Paketlerini Yönet'i seçin.
sqlite-net-pcl araması yapın ve seçin, ardından Yükle'yi seçin.
Ayrıca SQLitePCLRaw.bundle_green arayın ve seçin, ardından Yükle'yi seçin.
Visual Studio Code kullanıyorsanız terminali ve bu paketleri aşağıdaki komutlarla açın:
dotnet add package sqlite-net-pcl
dotnet add package SQLitePCLRaw.bundle_green
SQLite öznitelikleri ekleme
Person.cs dosyasında, sınıfın
SQLite
dosyasına ad alanı içinPerson
birusing
yönerge ekleyin. Bu yönerge, SQLite özniteliklerini kullanmanıza olanak tanır.using SQLite; namespace People.Models; public class Person { ... }
özniteliğiyle sınıfına
Person
[Table]
ek açıklama ekleyin ve tablo adını olarakpeople
belirtin.Id
Birincil anahtar olarak özelliğini belirtin. ve[AutoIncrement]
öznitelikleriyle not[PrimaryKey]
ekleyin.özelliğine
Name
ek açıklamalar ekleyin.MaxLength
250 olarak belirtin. sütunundaki her değerin olmasıUnique
gerektiğini belirtin.Tamamlanan sınıf şöyle görünmelidir:
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; } }
Person.cs dosyasını kaydedin.
Veritabanına bağlanın
PersonRepository.cs dosyasını açın.
sınıfını
PersonRepository
inceleyin. Bu sınıf, veritabanına erişmek için işlevselliği ekleyeceğiniz işaretçileri olanTODO
tamamlanmamış iskelet kodu içerir.sınıfı için
SQLite
dosyasına vePeople.Models
ad alanları içinPersonRepository.cs
birusing
yönerge ekleyin.işlevinin üstüne
Init
sınıfına adlıconn
özelSQLiteConnection
bir alan ekleyin.işlevinde
Init
, değerine eşitnull
olup olmadığınıconn
denetleyin. Öyleyse, hemen geri dönün.if (conn != null) return;
Bu şekilde, SQLite veritabanının başlatma kodu yalnızca bir kez çalıştırılır.
değişkenini
conn
kullanarak_dbPath
veritabanına bağlanmak için alanını başlatın.Veri depolamak
conn.CreateTable
Person
için bir tablo oluşturmak için yöntemini kullanın. TamamlananInit
işlev aşağıdaki gibi görünmelidir:using SQLite; using People.Models; ... private SQLiteConnection conn; ... private void Init() { if (conn != null) return; conn = new SQLiteConnection(_dbPath); conn.CreateTable<Person>(); }
Veritabanına satır ekleme
sınıfında
PersonRepository
yöntemini bulunAddNewPerson
.TODO
Yeni birPerson
nesne eklemek için bu yöntemdeki açıklamayı kodla değiştirin. Kod önce veritabanının başlatıldığını doğrulamak için çağırırInit
, ardından nesneninSQLiteConnection
Insert
yöntemini kullanır.result
Değişkeni, aşağıdaki kodda gösterildiği gibi yöntemin döndürdüğü değereInsert
ayarlayın: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 }); ... } ... }
Veritabanından satır alma
PersonRepository
sınıfında yöntemini bulunGetAllPeople
.Veritabanının başlatıldığını doğrulamak için çağrısı
Init
yapın.Tablodaki tüm satırları almak için genel
Table\<T>
yöntemini kullanın. tür parametresi olarak belirtinPerson
.ToList()
Uzantı yöntemini kullanarak sonucu birList\<Person>
koleksiyona dönüştürün ve bu koleksiyonu döndürün.Kodunuzu bir
try-catch
bloğun içine kaydırarak hata işleme ekleyin. Hata varsa özelliğini özel durumunMessage
özelliğine ayarlayınStatusMessage
ve boş bir koleksiyon döndürin. Tamamlanmış yöntem aşağıdaki gibi görünmelidir: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>(); }
PersonRepository.cs dosyasını kaydedin.
Depoyu kullanıcı arabirimiyle tümleştirme
MauiProgram.cs dosyasını açın.
işlevinde
CreateMauiApp
, sayfayıMainPage
uygulamaya tekil hizmet olarak ekleyen deyimlerden sonra aşağıdaki görevleri gerçekleştirmek için kod ekleyin:adlı
dbPath
bir dize değişkeni oluşturun. Bu dizeyi ifadesiyleFileAccessHelper.GetLocalFilePath("people.db3")
başlatın. Uygulamanın kullandığı veritabanı dosyası people.db3 olarak adlandırılır ve uygulama bu dosyayı cihazdaki yerel depolama alanına kaydeder.Sınıfı uygulamaya tekil hizmet olarak eklemek
PersonRepository
için bağımlılık ekleme özelliğini kullanın. sınıfı,PersonRepository
veritabanı dosyasının yolunu dize parametresi olarak alan bir oluşturucuyu kullanıma sunar.
İşlevin
CreateMauiApp
tamamlanmış kodu şu şekilde görünmelidir: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(); }
MauiProgram.cs dosyasını kaydedin.
Çözüm Gezgini App.xaml'i genişletin, ardından App.xaml.cs dosyasını açın.
sınıfına bir
public
nesneApp
tutmak için adlıPersonRepo
birPersonRepository
,static
özelliği ekleyin.Oluşturucuya
PersonRepo
birPersonRepository
parametre ekleyerek ve 'PersonRepo' özelliğini bu parametredeki değere ayarlayarak oluşturucuda özelliğini başlatın. TamamlananApp
sınıf şöyle görünmelidir:public partial class App : Application { public static PersonRepository PersonRepo { get; private set; } public App(PersonRepository repo) { InitializeComponent(); MainPage = new AppShell(); PersonRepo = repo; } }
Dekont
Bağımlılık ekleme işlemi, parametresini repo
oluşturucuya otomatik olarak doldurur.
Uygulamayı test etme
CTRL+Shift+B tuşlarını kullanarak çözümü derleyin ve F5 kullanarak hata ayıklamaya başlayın. Kullanıcı arabirimi göründüğünde adınızı girin ve Kişi Ekle'yi seçin.
Tüm Kişiler Al'ı seçin ve adınızın görüntülendiğini doğrulayın.
Daha fazla ad ekleyerek ve depolanan kişilerin listesini alarak denemeler yapın.
Visual Studio veya Visual Studio Code'a dönün ve Shift+F5 tuşlarını kullanarak hata ayıklamayı durdurun.
Uygulamayı yeniden başlatın ve Tüm Kişiler Al'ı seçin. Daha önce depoladığınız adların hala veritabanında depolandığını doğrulayın. İşiniz bittiğinde uygulamayı kapatın.