EF Core ve Xamarin ile Çalışmaya Başlama
Bu öğreticide, Entity Framework Core kullanarak SQLite veritabanına veri erişimi gerçekleştiren bir Xamarin.Forms uygulaması oluşturacaksınız.
Windows'da Visual Studio'yu veya Mac için Visual Studio kullanarak öğreticiyi izleyebilirsiniz.
Bahşiş
Bu makalenin örneğini GitHub'da görüntüleyebilirsiniz.
Önkoşullar
Aşağıdakilerden birini yükleyin:
- Bu iş yüküyle Visual Studio 2019 sürüm 16.3 veya üzeri :
- .NET ile Mobil Geliştirme
- Mac için Visual Studio
Bu belge, her platform için ayrıntılı adım adım yükleme yönergeleri sağlar.
Örnek projeyi indirme ve çalıştırma
Bu örnek uygulamayı çalıştırmak ve keşfetmek için kodu GitHub'a indirin.
İndirildikten sonra çözüm dosyasını EFGettingStarted.sln
Visual Studio'da açın veya Mac için Visual Studio 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ğunda 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'e 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ğunda 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ünü 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.
Verileri görüntüleme ve sayfalar arasında gezinme ile ilgili Xamarin.Forms konularını bildiğiniz varsayılır.
Önemli
Entity Framework Core, Sürüm modu yapılandırmalarında Xamarin.iOS bağlayıcısının çıkarabileceği işlevleri çağırmak için yansıma kullanır. Bunu iki yoldan biriyle önleyebilirsiniz.
- Birincisi, iOS Derleme seçeneklerindeki Ek mtouch bağımsız değişkenlerine eklemektir
--linkskip System.Core
. - Alternatif olarak, iOS Derleme seçeneklerinde Xamarin.iOS Bağlayıcısı davranışını
Don't Link
olarak 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 Post
bu sınıflar klasöründe bulunabilir Models
.
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>(); } }
özelliği ile
Posts
Post
arasındaBlog
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; } } }
BlogId
veBlog
özellikleri, örneğinin üstBlog
nesnesiylePost
ilgilidir.
Veri bağlamı
BloggingContext
sınıfı klasöründe bulunur Services
ve EF Core DbContext
sınıfından devralır. , DbContext
veritabanı sorgularını ve değişikliklerini gruplandırmak için 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}");
}
}
}
- Bu türdeki
DbSet
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.- İşlev,
OnConfiguring
fiziksel cihazdaki SQLite veritabanının konumunu ayarlar.
Oluşturma, okuma, güncelleştirme ve silme
Uygulamada SQLite'e erişmek için EF Core'un kullanıldığı bazı örnekler aşağıdadır.
Oku
- Tüm kayıtları döndürür.
OnAppearing
işleviBlogsPage.xaml.cs
tümBlog
kayıtları döndürür ve bunları birList
değişkende depolar.
using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
- Belirli kayıtları döndürür.
OnAppearing
işleviPostsPage.xaml.cs
, belirliBlogId
bir içeren kayıtları döndürürPost
.
using (var blogContext = new BloggingContext())
{
var postList = blogContext.Posts
.Where(p => p.BlogId == BlogId)
.ToList();
}
Oluşturma
- Yeni bir kayıt ekleyin.
- işlevi SQLite
Save_Clicked
veritabanına yeniBlog
bir nesne ekler.AddBlogPage.xaml.cs
- işlevi SQLite
var blog = new Blog { Url = blogUrl.Text };
using (var blogContext = new BloggingContext())
{
blogContext.Add(blog);
await blogContext.SaveChangesAsync();
}
Güncelleştir
- Mevcut bir kaydı güncelleştirin.
Save_Clicked
işleviAddPostPage.xaml.cs
, var olanBlog
bir nesneyi yeniPost
bir ile 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();
}
Sil
- Alt kayıtlara art arda gelen tüm kayıtları silin.
- işlevi
BlogsPage.xaml.cs
,DeleteAll_Clicked
SQLite veritabanındakiBlog
tüm kayıtları siler ve silmeleri alt kayıtlarınBlog
Post
tümüne basamaklar.
- işlevi
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.
Xamarin geliştiricilerinin ilgilendiği diğer Entity Framework Core konuları:
- Yapılandırma
DbContext
- LINQ sorgu ifadeleri hakkında daha fazla bilgi edinin
- Gerekli ve maksimum uzunluk gibiöğeleri belirtmek için modelinizi yapılandırın