Aracılığıyla paylaş


Entity Framework Core'u Kullanmaya Başlama

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.

Tüm blog listesi sayfasının ekran görüntüsü

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.

Yeni blog düzenleme sayfasının ekran görüntüsü

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.

Blog gönderileri listesi sayfasının ekran görüntüsü

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.

Yeni gönderi ekleme sayfasının ekran görüntüsü

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.

Tüm blogların silindiği uygulamanın ekran görüntüsü

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.Core eklemektir.
  • Alternatif olarak, iOS Derleme seçeneklerinde Xamarin.iOS Bağlayıcı davranışı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 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, Blog ile Postarası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; }
        }
    }
    
  • BlogId ve Blog özellikleri, Postörneğinin bağlı olduğu üst Blog nesnesine 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}");
        }
    }
}
  • DbSet tü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.
  • OnConfiguring iş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.cs OnAppearing işlevi tüm Blog kayıtları döndürür ve bunları bir List değişkeninde depolar.

      using (var blogContext = new BloggingContext())
      {
          var theBlogs = blogContext.Blogs.ToList();
      }
      
  • Belirli kayıtları döndürür.

    • PostsPage.xaml.cs OnAppearing işlevi, belirli bir BlogIdiçeren Post kayı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.cs Save_Clicked işlevi SQLite veritabanına yeni bir Blog nesnesi 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.cs Save_Clicked işlevi, var olan bir Blog nesnesini yeni bir Postile 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.cs DeleteAll_Clicked işlevi, SQLite veritabanındaki Blog kayıtlarının tümünü siler, ve silme işlemlerini Blog alt Post kayı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.