Başlarken ve Xamarin EF Core ile birlikte
Bu öğreticide, SQLite veritabanına veri erişimi gerçekleştiren bir Xamarin.Forms uygulaması oluşturur ve Entity Framework Core.
Öğreticiyi takip etmek için Visual Studio veya Windows Mac için Visual Studio.
İpucu
Bu makalenin örneğini GitHub.
Önkoşullar
Aşağıdakilerden birini yükleyin:
- Visual Studio 2019 sürüm 16.3 veya sonraki sürümler:
- .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.
İndirildikten sonra çözüm dosyasını Visual Studio EFGettingStarted.sln veya Mac için Visual Studio istediğiniz platformda çalıştırın.
Uygulama ilk kez başlatıldığında, yerel SQLite veritabanını blogları temsil eden iki girişle doldurmak için kullanılır.

Araç çubuğunda Ekle düğmesine tıklayın.
Yeni bir blog hakkında bilgi girmenize olanak sağlayan 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 kaydedecek ve listede görünür.
Listede blog girişlerinden birini tıklar ve ilgili blog gönderilerini ekleyebilirsiniz.

Araç çubuğunda Ekle'ye tıklayın.
Daha sonra yeni bir blog gönderisi hakkında bilgi doldurmanız için 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ıklamış olduğunuz blog gönderisi ile ilişkilendirilecek ve uygulamanın SQLite veritabanına kaydedecek ve listede gösterecektir.
Geri dön listesi sayfasına gidin. Araç çubuğundan Hepsini Sil'e tıklayın. Ardından tüm bloglar ve ilgili gönderiler uygulamanın SQLite veritabanından silinir.

Kodu keşfetme
Aşağıdaki bölümler, Xamarin.Forms ile SQLite veritabanındaki verileri okuma, oluşturma, güncelleştirme ve silme EF Core size yol gösterir.
Verileri görüntülemeye ve sayfalar arasında gezinmeye ilişkin Xamarin.Forms konularınaaşina olduğunuz varsayılır.
Önemli
Entity Framework Core Xamarin.iOS linker'ın Yayın modu yapılandırmaları sırasında çıkarabiliyor olduğu işlevleri çağırmak için yansıma kullanır. Bunu iki şekilde önleyebilirsiniz.
--linkskip System.Coreİlki, iOS Derleme--linkskip System.Corebağımsız değişkenlerine eklemektir.- Alternatif olarak, iOS Derleme seçeneklerinde Xamarin.iOS Linker davranışını olarak ayarlayın. Bu makalede Xamarin.iOS'ta davranışı ayarlama da dahil olmak üzere Xamarin.iOS linker hakkında daha fazla bilgi açıklanmıştır. (Bu yaklaşım, mağazadan reddedilmesine neden olduğu için ideal değildir).
Entity Framework Core NuGet paketleri
EF Core ile Xamarin.Forms uygulamaları oluşturmak için, Xamarin.Forms çözümünde tüm projelere hedeflemek istediğiniz EF Core veritabanı sağlayıcılarının paketini yükleyin. Bu öğreticide SQLite sağlayıcısı kullanır.
Aşağıdaki NuGet paketi, Xamarin.Forms çözümünde yer alan projelerin her biri için gereklidir.
Microsoft.EntityFrameworkCore.Sqlite
Model sınıfları
EF Core aracılığıyla erişilen SQLite veritabanındaki her tablo bir sınıfta model oluşturur. Bu örnekte iki sınıf kullanılır: BlogPost ve klasöründe Models bulunabilir.
Model sınıfları yalnızca veritabanındaki model sütunları olan ö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
Postsile arasında bir üst-alt ilişkiBlogPosttanı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, örneğinin üstBlognesnesiylePostilgilidir.
Veri bağlamı
sınıfı BloggingContext klasöründe bulunur ve EF Core ServicesDbContext devralınır. Veritabanı DbContext sorgularını ve değişikliklerini birlikte grup oluşturmak 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ür sınıftaki her iki özellik
DbSetde Bloglar ve Gönderiler'i temsil eden temel alınan tablolarda çalıştırmak için kullanılır. SQLitePCL.Batteries_V2.Init(), iOS üzerinde SQLite başlatmak için oluşturucuda gereklidir.- İşlev,
OnConfiguringfiziksel cihaz üzerinde SQLite veritabanının konumunu ayarlar.
Silmeyi oluşturma, okuma, & güncelleştirme
Aşağıdakiler, SQLite'a erişmek için EF Core kullanılan uygulama örnekleridir.
Okuma
- Tüm kayıtları geri dön.
- işlevi
OnAppearingtüm kayıtları döndürür ve bunları birBlogsPage.xaml.csBlogdeğişkendeListdepolar.
- işlevi
using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
- Belirli kayıtları iade.
- işlevi,
OnAppearingbelirli bir içeren kayıtlarıPostsPage.xaml.csPostBlogIddöndürür.
- işlevi,
using (var blogContext = new BloggingContext())
{
var postList = blogContext.Posts
.Where(p => p.BlogId == BlogId)
.ToList();
}
Oluştur
- Yeni bir kayıt ekler.
Save_Clickedişlevi,AddBlogPage.xaml.csBlogSQLite veritabanına yeni bir nesne ekler.
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ştirme.
- işlevinin
Save_Clickedmevcut bir nesneyi yeni bir ileAddPostPage.xaml.csBlogPostgüncelleştirmesi.
- işlevinin
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 basamaklı olarak tüm kayıtları silin.
DeleteAll_Clickedişlevi, SQLite veritabanındaki tüm kayıtları siler ve silmeleri tüm altBlogsPage.xaml.csBlogkayıtlaraBlogPostbasamaklar.
using (var blogContext = new BloggingContext())
{
blogContext.RemoveRange(blogContext.Blogs);
await blogContext.SaveChangesAsync();
}
Sonraki adımlar
Bu kullanmaya başlarken, Xamarin.Forms uygulamasını kullanarak SQLite veritabanına erişmek için Entity Framework Core.
Diğer Entity Framework Core Xamarin geliştiricileriyle ilgili konular: