Merhaba,
Bugün, sizlerden gelen mailler doğrultusunda Xamarin ile SQLite işlemlerini konu alan bir proje yapacağız.
Mobil platformlar üzerinde local bir veritabanına ihtiyaç duymuyor değiliz..
Bu gibi durumlarda yardımımıza SQLite koşuyor!
Aslında şunu söyleyebiliriz SQLite Mobil dünyanın kahramanlarından.
Bu örneğimizde proje tipimiz PCL olacak ve Xamarin Dependency servisleri kullanacağız.
Dependency Servis Nedir?
Xamarin.Forms uygulamaları geliştirirken platform spesifik yapmak istediğimiz işlemleri tek bir interface üzerinden oluşturmamızı ve gerçekleştirmemizi sağlar. Bu durum Xamarin.Forms üzerinde kod bağımlılığını teke indirmemizi de sağlamaktadır.
PCL projelerimizde UWP eklensin mi? sorusuna ben “Cancel” dedim. Siz isterseniz ekleyebilirsiniz.
SQLite.Net-PCL .dll’ini nuget ortamından projelerimize dahil ediyoruz.
Sizlerin de bildiği gibi cross-platform bir uygulama geliştiriyoruz ve gerekli bağlantı bilgimiz platformlara özel olduğu için bağlantı nesnemizin path ve platform özellikleri değişken olacaktır. Zaten bu yüzden Xamarin.Forms DependencyService’ini kullanacağız.
Platform özelindeki connection bilgilerini ISQLite interface’inden türemiş olan sınıflardan DependencyService yardımıyla alacağız.
Gerekli CRUD işlemlerimizin ve oluşturacağımız Student tablosunun olduğu SQLiteClient sınıfımız.
CreateTable işlemi çok kısa ve net bir şekilde çalışmaktadır. İçerisine verdiğiniz modeli tablo olarak açar ve işlemleri yapar. Eğer Student tipinde bir tablo varsa bir daha açmaz bu kontrolü SQLite.Net-PCL .dll’i kendisi yapmaktadır.
Buradaki lock objesine dikkat çekmek istiyoruz.
Lock nedir? Önce bunu açıklayalım..
Lock, C# programlama dilinde multi thread uygulamalarda thread güvenliğini sağlamak için kullanılan bir yoldur.
Kullanılan method veya eventlerinizde aynı anda sadece bir thread’in çalışmasını sağlamaktadır.
Bu yüzden SQLite objesi ile çalışırken thread güvenliğini sağlamamız gerektiği için lock objesini kullanmaktayız.
Droid ve WinPhone projelerimde gerekli Dependency sınıflarımı yazarak platform özelinde bağlantı bilgilerini aldım.
assembly tarafında, Xamarin.Forms Dependency için ISQLite interface’inden türemiş DroidConnection sınıfının çalışacağını garanti etmiş oluyorum.
Çünkü bağlantı bilgisini alırken, DependencyService.Get<ISQLite>().GetConnection(); ISQLite tipinden bir sınıfın bağlantı bilgisini vereceğini DependencyService’e söyledim.
Ben uygulamamı tek bir katmanda çalıştırıyorum fakat, SQLite bağlantı bilgisi hangi platformda çalışıyorsa ona özel gelecek.
Günün sonunda eğer Android ortamında çalışıyorsan DroidConnection, WinPhone ortamında çalışıyorsam WinPhoneConnection sınıflarım çalışacak.
WinPhone ortamında SQLite ile çalışırken yapmanız gereken 1-2 ek durum mevcut.
WinPhone projenizin referanslarına resimde gördüğünüz 2 .dll’i eklemeniz gerekmektedir.
Not: SQLite for Windows Phone 8.1 Visual Studio eklentisidir. Eğer sizden çıkmıyorsa indirip kurmanız gerekmektedir.
WinPhone 8.1 ortamına .dll’leri ekledikten sonra uyarı alırsanız.
Tools altındaki çalışma ortamını x86 yapmak zorundasınız.
Not: Güncelleme işlemini size bıraktım. Yapan ve github üzerinden fork atan kişi ile ortak bir örnek konu/proje yazmak isterim 🙂 Umarın yaparken eğlenirsiniz..
Proje’nin önemli noktalarına değindim, diğer detayları hakkında yazılarım ve uygulamalarım olduğu için konulardan bakabilirsiniz veya sorularınızı burdan sorabilirsiniz.
Github üzerinden ilgili projeyi indirip inceleyebilrisiniz. Xamarin.Forms ile SQLite, MVVM, DependencyService Kullanımı
Görüşmek üzere.
Yorum Gönder