Bagikan melalui


Memulai EF Core dan Xamarin

Dalam tutorial ini, Anda membuat aplikasi Xamarin.Forms yang melakukan akses data terhadap database SQLite menggunakan Entity Framework Core.

Anda dapat mengikuti tutorial dengan menggunakan Visual Studio di Windows atau Visual Studio untuk Mac.

Tip

Anda dapat melihat contoh artikel ini di GitHub.

Prasyarat

Instal salah satu hal di bawah ini:

Dokumentasi ini menyediakan instruksi penginstalan langkah demi langkah terperinci untuk setiap platform.

Mengunduh dan menjalankan proyek sampel

Untuk menjalankan dan menjelajahi aplikasi sampel ini, unduh kode di GitHub.

Setelah diunduh, buka file EFGettingStarted.sln solusi di Visual Studio atau Visual Studio untuk Mac dan jalankan aplikasi di platform pilihan Anda.

Ketika aplikasi pertama kali dimulai, aplikasi akan mengisi database SQLite lokal dengan dua entri yang mewakili blog.

Screenshot of all blogs list page

Klik tombol Tambahkan di toolbar.

Halaman baru akan muncul yang memungkinkan Anda memasukkan informasi tentang blog baru.

Screenshot of new blog edit page

Isi semua info dan klik Simpan dari toolbar. Blog baru akan disimpan ke database SQLite aplikasi dan akan ditampilkan dalam daftar.

Anda dapat mengklik salah satu entri blog dalam daftar dan melihat posting apa pun untuk blog tersebut.

Screenshot of blog posts list page

Klik Tambahkan di toolbar.

Halaman kemudian muncul yang memungkinkan Anda mengisi informasi tentang posting blog baru.

Screenshot of add new post page

Isi semua informasi dan klik Simpan di toolbar.

Posting baru akan dikaitkan dengan posting blog yang Anda klik di langkah sebelumnya dan akan disimpan ke database SQLite aplikasi dan ditampilkan dalam daftar.

Kembali ke halaman daftar blog. Dan klik Hapus Semua di toolbar. Semua blog dan postingan yang sesuai kemudian akan dihapus dari database SQLite aplikasi.

Screenshot of app with all blogs deleted

Jelajahi kode

Bagian berikut akan memandu Anda melalui kode dalam proyek sampel yang membaca, membuat, memperbarui, dan menghapus data dari database SQLite menggunakan EF Core dengan Xamarin.Forms.

Diasumsikan bahwa Anda terbiasa dengan topik Xamarin.Forms untuk menampilkan data dan menavigasi antar halaman.

Penting

Entity Framework Core menggunakan refleksi untuk memanggil fungsi yang dapat dilucuti oleh linker Xamarin.iOS saat berada dalam konfigurasi mode Rilis . Anda dapat menghindarinya dengan salah satu dari dua cara.

  • Yang pertama adalah menambahkan --linkskip System.Core ke argumen Mtouch tambahan di opsi Build iOS.
  • Atau atur perilaku Xamarin.iOS Linker ke Don't Link dalam opsi Build iOS. Artikel ini menjelaskan lebih lanjut tentang linker Xamarin.iOS termasuk cara mengatur perilaku di Xamarin.iOS. (Pendekatan ini tidak ideal karena dapat mengakibatkan penolakan dari toko).

Paket Entity Framework Core NuGet

Untuk membuat aplikasi Xamarin.Forms dengan EF Core, Anda menginstal paket untuk penyedia database EF Core yang ingin Anda targetkan ke semua proyek dalam solusi Xamarin.Forms. Tutorial ini menggunakan penyedia SQLite.

Paket NuGet berikut diperlukan di setiap proyek dalam solusi Xamarin.Forms.

  • Microsoft.EntityFrameworkCore.Sqlite

Kelas model

Setiap tabel dalam database SQLite yang diakses melalui EF Core dimodelkan dalam kelas. Dalam sampel ini, dua kelas digunakan: Blog dan Post yang dapat ditemukan di Models folder.

Kelas model hanya terdiri dari properti, kolom model mana dalam database.

  • 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>();
        }
    }
    
  • Properti Posts mendefinisikan hubungan induk-anak antara Blog dan Post.

  • 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; }
        }
    }
    
  • Properti BlogId dan Blog berkaitan kembali ke objek induk Blog untuk instans Post.

Konteks data

Kelas BloggingContext ini terletak di Services folder dan mewarisi dari kelas EF Core DbContext . DbContext digunakan untuk mengelompokkan kueri dan perubahan database.

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}");
        }
    }
}
  • Kedua properti dalam kelas jenis DbSet ini digunakan untuk beroperasi pada tabel yang mendasar yang mewakili Blog dan Postingan.
  • SQLitePCL.Batteries_V2.Init() diperlukan dalam konstruktor untuk memulai SQLite di iOS.
  • Fungsi ini OnConfiguring menyiapkan lokasi database SQLite pada perangkat fisik.

Membuat, membaca, memperbarui , menghapus

Berikut ini adalah beberapa instans di aplikasi tempat EF Core digunakan untuk mengakses SQLite.

Baca

  • Mengembalikan semua rekaman.
    • Fungsi OnAppearingBlogsPage.xaml.cs mengembalikan semua Blog rekaman dan menyimpannya ke dalam List variabel.
using (var blogContext = new BloggingContext())
{
    var theBlogs = blogContext.Blogs.ToList();
}
  • Mengembalikan rekaman tertentu.
    • Fungsi OnAppearingPostsPage.xaml.cs mengembalikan Post rekaman yang berisi .BlogId
using (var blogContext = new BloggingContext())
{
    var postList = blogContext.Posts
        .Where(p => p.BlogId == BlogId)
        .ToList();
}

Membuat

  • Sisipkan rekaman baru.
    • Fungsi Save_ClickedAddBlogPage.xaml.cs menyisipkan objek baru Blog ke dalam database SQLite.
var blog = new Blog { Url = blogUrl.Text };

using (var blogContext = new BloggingContext())
{
    blogContext.Add(blog);

    await blogContext.SaveChangesAsync();
}

Update

  • Perbarui rekaman yang sudah ada.
    • Fungsi Save_ClickedAddPostPage.xaml.cs memperbarui objek yang ada Blog dengan baru Post.
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();
}

Delete

  • Hapus semua rekaman dengan kaskade ke rekaman turunan.
    • Fungsi DeleteAll_ClickedBlogsPage.xaml.cs menghapus semua Blog rekaman dalam database SQLite dan kaskade penghapusan ke semua Blog rekaman anak Post .
using (var blogContext = new BloggingContext())
{
    blogContext.RemoveRange(blogContext.Blogs);

    await blogContext.SaveChangesAsync();
}

Langkah berikutnya

Dalam memulai ini, Anda telah mempelajari cara menggunakan aplikasi Xamarin.Forms untuk mengakses database SQLite menggunakan Entity Framework Core.

Topik Inti Kerangka Kerja Entitas lainnya yang menarik bagi pengembang Xamarin: