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:
- Visual Studio 2019 versi 16.3 atau yang lebih baru dengan beban kerja ini:
- Pengembangan Seluler dengan .NET
- Visual Studio untuk Mac
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.
Klik tombol Tambahkan di toolbar.
Halaman baru akan muncul yang memungkinkan Anda memasukkan informasi tentang blog baru.
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.
Klik Tambahkan di toolbar.
Halaman kemudian muncul yang memungkinkan Anda mengisi informasi tentang posting blog baru.
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.
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 antaraBlog
danPost
.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
danBlog
berkaitan kembali ke objek indukBlog
untuk instansPost
.
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
OnAppearing
BlogsPage.xaml.cs
mengembalikan semuaBlog
rekaman dan menyimpannya ke dalamList
variabel.
- Fungsi
using (var blogContext = new BloggingContext())
{
var theBlogs = blogContext.Blogs.ToList();
}
- Mengembalikan rekaman tertentu.
- Fungsi
OnAppearing
PostsPage.xaml.cs
mengembalikanPost
rekaman yang berisi .BlogId
- Fungsi
using (var blogContext = new BloggingContext())
{
var postList = blogContext.Posts
.Where(p => p.BlogId == BlogId)
.ToList();
}
Membuat
- Sisipkan rekaman baru.
- Fungsi
Save_Clicked
AddBlogPage.xaml.cs
menyisipkan objek baruBlog
ke dalam database SQLite.
- Fungsi
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_Clicked
AddPostPage.xaml.cs
memperbarui objek yang adaBlog
dengan baruPost
.
- Fungsi
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_Clicked
BlogsPage.xaml.cs
menghapus semuaBlog
rekaman dalam database SQLite dan kaskade penghapusan ke semuaBlog
rekaman anakPost
.
- Fungsi
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:
- Mengonfigurasi
DbContext
- Pelajari selengkapnya tentang ekspresi kueri LINQ
- Mengonfigurasi model Anda untuk menentukan hal-hal seperti yang diperlukan dan panjang maksimum
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk