Pola Repositori dengan Entity Framework Core sudah usang

Pola Repositori dengan Entity Framework Core sudah usang 17 Oktober 2021

Diposting oleh fofo di ASP.Net Core, Entity framework, Entity Framework Core.

Tags: Pola Repositori
lacak balik

Banyak pengembang saat membangun aplikasi multi-tingkat dan berlapis-lapis menggunakan pola untuk meningkatkan kemampuan pengujian dan kegunaan aplikasi mereka. Mereka sering menggunakan Pola UoW dan Repositori yang secara umum adalah pola yang bagus untuk digunakan.

Misalnya, dalam kasus pola repositori, tujuannya adalah untuk mengabstraksikan logika kueri basis data tingkat rendah.

Pengembang biasa menulis pernyataan SQL dalam kode mereka dan pola repositori adalah cara untuk memindahkan SQL dari metode individual yang tersebar di seluruh basis kode.

Pengembang yang membangun aplikasi dengan ASP.Net Core dan Entity Framework Core tidak boleh menggunakan pola UoW dan Repositori lagi. EF Core mendukung pengujian unit dan konteks tiruan.

EF Core 100% ramah-tes, seseorang bahkan dapat mengejek apa misalnya Simpan perubahan metode (mengembalikan jumlah catatan yang terpengaruh) kembali.

Ini juga mendukung penyuntikan konteks database ke dalam permintaan web dengan menggunakan a layanan yang menggunakan Injeksi Ketergantungan.

Singkatnya, Entity Framework sudah mengimplementasikan pola repositori. DbKonteks adalah UoW (Satuan Kerja) dan masing-masing DbSet adalah repositori. Dengan menerapkan lapisan lain di atas ini, tidak hanya berlebihan, tetapi membuat pemeliharaan jauh lebih sulit.

Mari kita bertanya pada diri kita sendiri. Apa itu DbContext? Ini adalah sebuah kelas. Ini adalah tidak punya otak. Ini adalah kelas yang berisi beberapa properti, masing-masing mengimplementasikan IDbSet. IDbSet adalah hal yang sama dengan iRepositori.

Ini berisi metode untuk Tambah, Hapus, dll. Ini juga mengimplementasikan Dapat dimintai permintaan – jadi Anda memiliki keseluruhan kumpulan kueri LINQ termasuk hal-hal seperti Pertama, Single, Dimana.

Contoh di bawah ini menunjukkan cara menambahkan konteks basis data Entity Framework Core sebagai layanan menggunakan Injeksi Ketergantungan dalam ASP.Net MVC Core 3.1 aplikasi. Ini hanya cuplikan dan bukan keseluruhan basis kode.

Kami juga akan mendemonstrasikan cara mereferensikan konteks database dari Kontroler MVC.

Kita perlu memiliki string koneksi misalnya Koneksi Default. Ini dikonfigurasi dalam pengaturan aplikasi.json, pengaturan aplikasi.Pengembangan.json file.

Dalam contoh ini database server adalah SQL Server.

Anda juga perlu menginstal Microsoft.EntityFrameworkCore.SqlServer Paket Nuget.

Kelas Model/ViewModel:

public class Customer {
    [Key]
    public int Id { get; set; }
    public String FullName { get; set; }
}

Kelas DBContext:

public class ModelContext : DbContext {
    public ModelContext(DbContextOptions<ModelContext> options) : base(options) {
    }
    public DbSet<Customer> Customers { get; set; } 
    
}

Kita sekarang perlu mengatur injeksi ketergantungan dengan mengonfigurasi Startup.cs mengajukan:

public void ConfigureServices(IServiceCollection services) {
  services.AddDbContext<ModelContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
  services.AddControllersWithViews();
}

Sekarang kita perlu membuat DBContext dapat diakses dari dalam setiap pengontrol, mis Pengontrol Pelanggan melalui konstruktor. Lihat di bawah (hanya cuplikan)

public class CustomerController: Controller {

private readonly ModelContext _context;


public CustomerController(ILogger<CustomerController> logger, ModelContext context) { 
  _logger = logger;
  _context = context; 
}

 public IActionResult Index() {
        List<Customer> AllCustomers = _context.Customers.ToList();
        return View(AllCustomers);
    }


}

Untuk rekap, saat menulis kode cobalah untuk menghindari kerumitan yang tidak perlu dengan merekayasa hal-hal yang berlebihan. Mendapatkan data dari database adalah operasi umum dan dengan menambahkan lapisan abstraksi tambahan biasanya hanya mempersulit pemeliharaan kode.