Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu öğreticide, Entity Framework Core kullanarak SQLite veritabanında veri erişimi gerçekleştiren bir Xamarin.Forms uygulaması oluşturacaksınız.
Windows üzerinde Visual Studio'yu veya Mac için Visual Studio'yu kullanarak öğreticiyi izleyebilirsiniz.
Bahşiş
Bu makalenin örneğini GitHubüzerinde görüntüleyebilirsiniz.
Önkoşullar
Aşağıdakilerden birini yükleyin:
- Visual Studio 2019 sürüm 16.3 veya üzeriyle, bu iş yükünü kullanarak:
- .NET ile Mobil Geliştirme
- Mac için Visual Studio
Bu belgelerinde her platform için ayrıntılı adım adım yükleme yönergeleri sağlanır.
Örnek projeyi indirme ve çalıştırma
Bu örnek uygulamayı çalıştırmak ve keşfetmek için kodu GitHub'a indirin.
İndirildikten sonra, visual studio veya Mac için Visual Studio'da EFGettingStarted.sln çözüm dosyasını açın ve uygulamayı istediğiniz platformda çalıştırın.
Uygulama ilk kez başlatıldığında yerel SQLite veritabanını blogları temsil eden iki girişle doldurur.
Araç çubuğundaki Ekle düğmesine tıklayın.
Yeni bir blog hakkında bilgi girmenize olanak tanıyan yeni bir sayfa görüntülenir.
Tüm bilgileri doldurun ve araç çubuğundan kaydet tıklayın. Yeni blog, uygulamanın SQLite veritabanına kaydedilir ve listede gösterilir.
Listedeki blog girdilerinden birine tıklayabilir ve bu blogun gönderilerini görebilirsiniz.
Araç çubuğunda Ekle'ye tıklayın.
Ardından yeni bir blog gönderisi hakkındaki bilgileri doldurmanıza olanak tanıyan bir sayfa görüntülenir.
Tüm bilgileri doldurun ve araç çubuğundaki Kaydet'e tıklayın.
Yeni gönderi, önceki bir adımda tıkladığınız blog gönderisi ile ilişkilendirilir ve uygulamanın SQLite veritabanına kaydedilir ve listede gösterilir.
Blog listesi sayfasına geri dönün. Araç çubuğunda Tüm Sil'e tıklayın. Ardından tüm bloglar ve ilgili gönderileri uygulamanın SQLite veritabanından silinir.
Kodu keşfetme
Aşağıdaki bölümlerde, Xamarin.Forms ile EF Core kullanarak bir SQLite veritabanından veri okuyan, oluşturan, güncelleştiren ve SQLite veritabanından veri silip oluşturan örnek projedeki kodda size yol gösterilir.
Xamarin.Forms konularına aşina olduğunuz varsayılır: veri görüntüleme ve sayfalar arasında gezinme.
Önemli
Entity Framework Core, Xamarin.iOS bağlayıcısının Release modu yapılandırmalarında dışarıda bırakabileceği işlevleri çağırmak için reflection (yansıma) kullanır. Bunu iki yoldan biriyle önleyebilirsiniz.
- Birincisi, iOS Derleme seçeneklerinde Ek mtouch bağımsız değişkenlerine
--linkskip System.Coreeklemektir. - Alternatif olarak, iOS Derleme seçeneklerinde Xamarin.iOS Bağlayıcı davranışı
Don't Linkolarak ayarlayın. Bu makalede Xamarin.iOS bağlayıcısı hakkında Xamarin.iOS'ta davranışı ayarlama da dahil olmak üzere daha fazla bilgi verilmektedir. (Bu yaklaşım, mağazadan reddedilmesine neden olabileceğinden ideal değildir).
Entity Framework Core NuGet paketleri
EF Core ile Xamarin.Forms uygulamaları oluşturmak için, Xamarin.Forms çözümündeki tüm projelere hedeflemek istediğiniz EF Core veritabanı sağlayıcılarının paketini yüklersiniz. Bu öğreticide SQLite sağlayıcısı kullanılır.
Xamarin.Forms çözümündeki projelerin her birinde aşağıdaki NuGet paketi gereklidir.
Microsoft.EntityFrameworkCore.Sqlite
Model sınıfları
EF Core aracılığıyla erişilen SQLite veritabanındaki her tablo bir sınıfta modellenmiştir. Bu örnekte iki sınıf kullanılır: Blog ve Models klasöründe bulunabilen Post.
Model sınıfları yalnızca veritabanındaki sütunları modelleyen özelliklerden oluşur.
Blog.cs
using System; using System.Collections.Generic; namespace EFGetStarted { public class Blog { public int BlogId { get; set; } public string Url { get; set; } public List<Post> Posts { get; set; } = new List<Post>(); } }Postsözelliği,BlogilePostarasında bir üst-alt ilişki tanımlar.Post.cs
using System; namespace EFGetStarted { public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } } }BlogIdveBlogözellikleri,Postörneğinin bağlı olduğu üstBlognesnesine geri döner.
Veri bağlamı
BloggingContext sınıfı Services klasöründe bulunur ve EF Core DbContext sınıfından devralınır. veritabanı sorgularını ve değişikliklerini gruplandırmak için bir DbContext kullanılır.
using System;
using System.IO;
using Microsoft.EntityFrameworkCore;
using Xamarin.Essentials;
namespace EFGetStarted
{
public class BloggingContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
public BloggingContext()
{
SQLitePCL.Batteries_V2.Init();
this.Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
string dbPath = Path.Combine(FileSystem.AppDataDirectory, "blogs.db3");
optionsBuilder
.UseSqlite($"Filename={dbPath}");
}
}
}
-
DbSettüründeki bu sınıftaki her iki özellik de Blogları ve Gönderileri temsil eden temel tablolarda çalışmak için kullanılır. -
SQLitePCL.Batteries_V2.Init(), iOS üzerinde SQLite'i başlatmak için oluşturucuda gereklidir. -
OnConfiguringişlevi, fiziksel cihazdaki SQLite veritabanının konumunu ayarlar.
Oluşturma, okuma, güncelleştirme, silme &
Uygulamada SQLite'e erişmek için EF Core'un kullanıldığı bazı örnekler aşağıdadır.
Okumak
Tüm kayıtları döndürür.
BlogsPage.xaml.csOnAppearingişlevi tümBlogkayıtları döndürür ve bunları birListdeğişkeninde depolar.using (var blogContext = new BloggingContext()) { var theBlogs = blogContext.Blogs.ToList(); }
Belirli kayıtları döndürür.
PostsPage.xaml.csOnAppearingişlevi, belirli birBlogIdiçerenPostkayıtları döndürür.using (var blogContext = new BloggingContext()) { var postList = blogContext.Posts .Where(p => p.BlogId == BlogId) .ToList(); }
Yaratmak
- Yeni bir kayıt ekleyin.
AddBlogPage.xaml.csSave_Clickedişlevi SQLite veritabanına yeni birBlognesnesi ekler.var blog = new Blog { Url = blogUrl.Text }; using (var blogContext = new BloggingContext()) { blogContext.Add(blog); await blogContext.SaveChangesAsync(); }
Güncelleştirmek
- Mevcut bir kaydı güncelleştirin.
AddPostPage.xaml.csSave_Clickedişlevi, var olan birBlognesnesini yeni birPostile güncelleştirir.var newPost = new Post { BlogId = BlogId, Content = postCell.Text, Title = titleCell.Text }; using (var blogContext = new BloggingContext()) { var blog = await blogContext .Blogs .FirstAsync(b => b.BlogId == BlogId); blog.Posts.Add(newPost); await blogContext.SaveChangesAsync(); }
Silmek
- Tüm kayıtları ve alt kayıtlara kadar uzanan ilişkili kayıtları silin.
BlogsPage.xaml.csDeleteAll_Clickedişlevi, SQLite veritabanındakiBlogkayıtlarının tümünü siler, ve silme işlemleriniBlogaltPostkayıtlarının tümüne basamaklar.using (var blogContext = new BloggingContext()) { blogContext.RemoveRange(blogContext.Blogs); await blogContext.SaveChangesAsync(); }
Sonraki adımlar
Bu başlangıçta, Entity Framework Core kullanarak SQLite veritabanına erişmek için Xamarin.Forms uygulamasını kullanmayı öğrendiniz.