Dasar-Dasar DbContext & DbSet
Siapkan DbContext, definisikan entitas, konfigurasikan string koneksi, dan jalankan kueri pertama Anda.
Dasar-Dasar DbContext & DbSet adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Apa Itu Entity Framework Core?
EF Core adalah Pemeta Objek-Relasional (ORM) resmi untuk .NET. EF Core memetakan kelas C# (entitas) ke tabel basis data dan memungkinkan Anda melakukan kueri serta menyimpan data menggunakan LINQ — tanpa SQL untuk sebagian besar operasi.
Mendefinisikan Entitas
Entitas adalah kelas C# sederhana yang propertinya dipetakan ke kolom basis data. Berdasarkan konvensi, properti bernama Id atau <TypeName>Id menjadi kunci utama.
public class Product
{
public int Id { get; set; }
public string Name { get; set; } = "";
public decimal Price { get; set; }
public int Stock { get; set; }
public DateTime CreatedAt { get; set; }
}Membuat DbContext
DbContext adalah gerbang menuju basis data. Komponen ini memiliki properti DbSet<T> untuk setiap entitas serta mengelola koneksi, pelacakan perubahan, dan transaksi.
using Microsoft.EntityFrameworkCore;
public class AppDbContext : DbContext
{
public AppDbContext(DbContextOptions<AppDbContext> options)
: base(options) { }
public DbSet<Product> Products => Set<Product>();
public DbSet<Order> Orders => Set<Order>();
}Mendaftarkan DbContext dengan DI
Panggil AddDbContext dalam Program.cs untuk mendaftarkan konteks sebagai layanan bercakupan dan mengonfigurasi penyedia basis data.
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(
builder.Configuration.GetConnectionString("Default")));
// For SQLite (great for development/testing):
// options.UseSqlite("Data Source=app.db");Kueri Dasar dengan DbSet
DbSet<T> menyediakan operator LINQ. Kueri tidak dijalankan sampai dienumerasi (await ...ToListAsync()). Ini disebut eksekusi tertunda.
public class ProductService
{
private readonly AppDbContext _db;
public ProductService(AppDbContext db) => _db = db;
public async Task<List<Product>> GetExpensiveAsync(decimal minPrice)
{
return await _db.Products
.Where(p => p.Price >= minPrice)
.OrderBy(p => p.Name)
.ToListAsync();
}
}Mencari Berdasarkan Kunci Utama
FindAsync terlebih dahulu memeriksa tembolok pelacak perubahan lokal sebelum mengakses basis data. Gunakan ini saat melakukan kueri berdasarkan kunci utama untuk menghindari perjalanan bolak-balik yang tidak diperlukan.
var product = await _db.Products.FindAsync(42);
if (product is null)
throw new KeyNotFoundException("Product not found");
// For complex keys, pass all key values:
var orderLine = await _db.OrderLines.FindAsync(orderId, productId);Menambahkan Rekaman Baru
Panggil Add untuk mengantrekan entitas agar disisipkan, lalu panggil SaveChangesAsync untuk menerapkannya. EF Core menghasilkan SQL INSERT dan mengisi Id yang dibuat secara otomatis.
var product = new Product
{
Name = "Mechanical Keyboard",
Price = 149.99m,
Stock = 50,
CreatedAt = DateTime.UtcNow
};
_db.Products.Add(product);
await _db.SaveChangesAsync();
Console.WriteLine(product.Id); // Auto-generated PKMemperbarui Rekaman
Entitas yang dimuat oleh EF Core dilacak. Ubah properti secara langsung dan panggil SaveChangesAsync — EF Core mendeteksi perubahan dan menghasilkan pernyataan UPDATE yang dioptimalkan.
var product = await _db.Products.FindAsync(42);
if (product is not null)
{
product.Price = 129.99m;
product.Stock -= 1;
await _db.SaveChangesAsync(); // UPDATE Products SET Price=...
}Menghapus Rekaman
Panggil Remove untuk menandai entitas agar dihapus, lalu panggil SaveChangesAsync. Gunakan ExecuteDeleteAsync (.NET 7+) untuk menghapus data secara massal tanpa memuat entitas.
// Delete a tracked entity
_db.Products.Remove(product);
await _db.SaveChangesAsync();
// Bulk delete without loading (EF Core 7+)
await _db.Products
.Where(p => p.Stock == 0)
.ExecuteDeleteAsync();Mengonfigurasi dengan API Fluent
Timpa OnModelCreating untuk mengonfigurasi entitas menggunakan API Fluent — nama tabel, tipe kolom, batasan, indeks, dan relasi.
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>(entity =>
{
entity.ToTable("products");
entity.Property(p => p.Name).IsRequired().HasMaxLength(200);
entity.Property(p => p.Price).HasColumnType("decimal(18,2)");
entity.HasIndex(p => p.Name);
});
}Dunia Nyata: Repositori Menggunakan DbContext
Repositori pada umumnya membungkus DbContext untuk memusatkan logika akses data dan menjaga detail kueri tetap berada di luar kelas layanan.
public class ProductRepository : IProductRepository
{
private readonly AppDbContext _db;
public ProductRepository(AppDbContext db) => _db = db;
public async Task<Product?> GetByIdAsync(int id)
=> await _db.Products.AsNoTracking().FirstOrDefaultAsync(p => p.Id == id);
public async Task<List<Product>> SearchAsync(string query)
=> await _db.Products
.Where(p => p.Name.Contains(query))
.AsNoTracking()
.ToListAsync();
}Pemeriksaan Singkat
Apa yang dilakukan AsNoTracking() saat melakukan kueri dengan EF Core?
Ringkasan: Dasar-Dasar DbContext & DbSet
Poin penting:
- DbContext adalah sesi dengan basis data; DbSet<T> merepresentasikan sebuah tabel
- Daftarkan dengan
AddDbContextdalam DI; secara bawaan, layanan ini bercakupan - Kueri LINQ ditunda — jalankan dengan
ToListAsync,FirstOrDefaultAsync - Pelacakan perubahan memungkinkan UPDATE/DELETE otomatis melalui SaveChangesAsync
- Gunakan
AsNoTracking()untuk kueri hanya-baca guna meningkatkan kinerja
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Dasar-Dasar DbContext & DbSet” gratis?
Ya — teks lengkap “Dasar-Dasar DbContext & DbSet” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Dasar-Dasar DbContext & DbSet”?
Siapkan DbContext, definisikan entitas, konfigurasikan string koneksi, dan jalankan kueri pertama Anda. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Dasar-Dasar DbContext & DbSet” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Dasar-Dasar DbContext & DbSet
- Migrasi & Pengelolaan Skema
- Operasi CRUD dengan EF Core
- Relasi: Satu-ke-Banyak & Banyak-ke-Banyak