Inti Kerangka Kerja Entitas

Entity Framework (EF) Core adalah versi ringan, dapat diperluas, sumber terbuka, dan lintas platform dari teknologi akses data Entity Framework yang populer.

EF Core dapat berfungsi sebagai pemeta relasional objek (O/RM), yang:

  • Memungkinkan pengembang .NET bekerja dengan database menggunakan objek .NET.
  • Menghilangkan kebutuhan akan sebagian besar kode akses data yang biasanya perlu ditulis.

EF Core mendukung banyak mesin database, lihat Penyedia Database untuk detailnya.

Model

Dengan EF Core, akses data dilakukan dengan menggunakan model. Model terdiri dari kelas entitas dan objek konteks yang mewakili sesi dengan database. Objek konteks memungkinkan kueri dan penyimpanan data. Untuk informasi selengkapnya, lihat Membuat Model.

EF mendukung pendekatan pengembangan model berikut:

  • Membuat model dari database yang sudah ada.
  • Kode tangan model agar sesuai dengan database.
  • Setelah model dibuat, gunakan Migrasi EF untuk membuat database dari model. Migrasi memungkinkan pengembangan database saat model berubah.
using System.Collections.Generic;
using Microsoft.EntityFrameworkCore;

namespace Intro;

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(
            @"Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
    public int Rating { get; set; }
    public List<Post> Posts { get; set; }
}

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; }
}

Melakukan Permintaan

Instans kelas entitas Anda diambil dari database menggunakan Kueri Terintegrasi Bahasa (LINQ). Untuk informasi selengkapnya, lihat Mengkueri Data.

using (var db = new BloggingContext())
{
    var blogs = db.Blogs
        .Where(b => b.Rating > 3)
        .OrderBy(b => b.Url)
        .ToList();
}

Menyimpan data

Data dibuat, dihapus, dan dimodifikasi dalam database menggunakan instans kelas entitas Anda. Lihat Menyimpan Data untuk mempelajari selengkapnya.

using (var db = new BloggingContext())
{
    var blog = new Blog { Url = "http://sample.com" };
    db.Blogs.Add(blog);
    db.SaveChanges();
}

Pertimbangan EF O/RM

Meskipun EF Core pandai mengabstraksi banyak detail pemrograman, ada beberapa praktik terbaik yang berlaku untuk O/RM apa pun yang membantu menghindari jebakan umum dalam aplikasi produksi:

  • Pengetahuan tingkat menengah atau yang lebih tinggi dari server database yang mendasari sangat penting untuk merancang, men-debug, membuat profil, dan memigrasikan data dalam aplikasi produksi berkinerja tinggi. Misalnya, pengetahuan tentang kunci utama dan asing, batasan, indeks, normalisasi, pernyataan DML dan DDL, jenis data, pembuatan profil, dll.
  • Pengujian fungsional dan integrasi: Penting untuk mereplikasi lingkungan produksi sedekat mungkin untuk:
    • Menemukan masalah di aplikasi yang hanya muncul saat menggunakan versi atau edisi server database tertentu.
    • Menangkap perubahan yang melanggar saat meningkatkan EF Core dan dependensi lainnya. Misalnya, menambahkan atau meningkatkan kerangka kerja seperti ASP.NET Core, OData, atau AutoMapper. Dependensi ini dapat memengaruhi EF Core dengan cara yang tidak terduga.
  • Pengujian performa dan stres dengan beban representatif. Penggunaan beberapa fitur yang naif tidak menskalakan dengan baik. Misalnya, beberapa koleksi Termasuk, penggunaan pemuatan lambat yang berlebihan, kueri bersyarat pada kolom yang tidak diindeks, penyisipan dan pembaruan besar-besaran dengan nilai yang dihasilkan toko, kurangnya penanganan konkurensi, model besar, kebijakan cache yang tidak memadai.
  • Tinjauan keamanan: Misalnya, penanganan string koneksi dan rahasia lainnya, izin database untuk operasi non-penyebaran, validasi input untuk SQL mentah, enkripsi untuk data sensitif.
  • Pastikan pengelogan dan diagnostik cukup dan dapat digunakan. Misalnya, konfigurasi pengelogan yang sesuai, tag kueri, dan Application Insights.
  • Pemulihan kesalahan. Siapkan kemungkinan untuk skenario kegagalan umum seperti pembatalan versi, server fallback, peluasan skala dan penyeimbangan beban, mitigasi DoS, dan pencadangan data.
  • Penyebaran dan migrasi aplikasi. Rencanakan bagaimana migrasi akan diterapkan selama penerapan; melakukannya di awal aplikasi dapat mengalami masalah konkurensi dan memerlukan izin yang lebih tinggi daripada yang diperlukan untuk operasi normal. Gunakan penahapan untuk memfasilitasi pemulihan dari kesalahan fatal selama migrasi. Untuk informasi selengkapnya, lihat Menerapkan Migrasi.
  • Pemeriksaan terperinci dan pengujian migrasi yang dihasilkan. Migrasi harus diuji secara menyeluruh sebelum diterapkan ke data produksi. Bentuk skema dan jenis kolom tidak dapat diubah dengan mudah setelah tabel berisi data produksi. Misalnya, pada SQL Server, nvarchar(max) dan decimal(18, 2) jarang merupakan jenis terbaik untuk kolom yang dipetakan ke properti string dan desimal, tetapi keduanya merupakan default yang digunakan EF karena tidak memiliki pengetahuan tentang skenario spesifik Anda.

Langkah berikutnya

Untuk tutorial pengantar, lihat Memulai Entity Framework Core.