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 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.

Screenshot of all blogs list page

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.

Screenshot of new blog edit page

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.

Screenshot of blog posts list page

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.

Screenshot of add new post page

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.

Screenshot of app with all blogs deleted

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 PostsPostarasında Blog 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 ve Blog özellikleri, örneğinin üst Blog nesnesiyle Postilgilidir.

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şlevi BlogsPage.xaml.cs tüm Blog kayıtları döndürür ve bunları bir List 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, belirli BlogIdbir 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 yeni Blog bir nesne ekler.AddBlogPage.xaml.cs
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 olan Blog bir nesneyi yeni Postbir 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şleviBlogsPage.xaml.cs, DeleteAll_Clicked SQLite veritabanındaki Blog tüm kayıtları siler ve silmeleri alt kayıtların BlogPost 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.

Xamarin geliştiricilerinin ilgilendiği diğer Entity Framework Core konuları: