Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Industrial programming >> Bahasa C

Kerangka Entitas Utama:50 Pertanyaan &Jawaban Wawancara Utama (2026)

Bersiap untuk wawancara Entity Framework berarti mengantisipasi pertanyaan yang mengungkap kemampuan sebenarnya. Pertanyaan Wawancara Entity Framework mengungkapkan pemikiran, kesadaran kinerja, dan bagaimana kandidat menerjemahkan konsep ke dalam praktik.

Menguasai Entity Framework membuka peran dalam perkembangan modern, mulai dari platform berbasis data hingga layanan cloud. Paparan praktis membangun kemampuan analitis, memperkuat kedalaman teknis, dan mendukung tim. Pemimpin perekrutan menghargai penyelesaian masalah secara langsung, desain yang terukur, pendampingan junior, dan jalur pertumbuhan bagi lulusan baru.

Baca lebih lanjut…

👉 Unduh PDF Gratis:Pertanyaan &Jawaban Wawancara Entity Framework

1) Apa itu Entity Framework dan mengapa digunakan?

Entity Framework (EF) adalah kerangka kerja ORM (Object-Relational Mapping) Microsoft untuk .NET yang menyederhanakan interaksi database dengan memungkinkan pengembang bekerja dengan data sebagai objek .NET yang diketik dengan kuat, bukan SQL mentah . Abstraksi ini memungkinkan pengembang untuk melakukan operasi CRUD (Buat, Baca, Perbarui, Hapus) menggunakan konstruksi C# yang sudah dikenal, dan kerangka kerja menangani penerjemahan operasi ini ke dalam kueri SQL yang dioptimalkan. EF mengurangi kode akses data boilerplate, meningkatkan kemudahan pemeliharaan, dan membantu menegakkan keamanan jenis waktu kompilasi.

Misalnya, daripada menulis SQL, Anda dapat menggunakan:

var customers = context.Customers.Where(c => c.IsActive).ToList();

EF akan menerjemahkan kueri LINQ ini ke dalam SQL, mengeksekusinya pada database, dan mengembalikan hasilnya sebagai objek.

2) Jelaskan perbedaan antara pendekatan Code First, Database First, dan Model First.

Entity Framework mendukung tiga pendekatan pengembangan utama:

Pendekatan Kapan Digunakan Apa yang Terjadi Kode Pertama Proyek baru atau desain berbasis domainAnda menentukan kelas entitas. EF menghasilkan skema database dari kode.Database First DatabaseEF yang ada menghasilkan kelas entitas dan konteks dari skema yang ada.Model First Bila Anda lebih menyukai desain visual, Anda mendesain model dalam desainer visual (Entity Designer), dan EF menghasilkan kelas dan database.

Setiap pendekatan menyajikan skenario yang berbeda:Kode Pertama populer dalam pengembangan tangkas, Database First lebih disukai dengan database lama, dan Model First cocok untuk kasus di mana pemodelan visual itu penting.

3) Apa itu DbContext dan apa perannya di EF?

DbContext adalah kelas utama yang mengelola sesi dengan database , melacak perubahan entitas, dan mengoordinasikan penyimpanan data kembali ke database. Ini mewakili jembatan antara aplikasi C# Anda dan database. Melalui DbContext , Anda mendefinisikan DbSet<TEntity> properti, yang mewakili kumpulan entitas dan dipetakan ke tabel dalam database.

Contoh:

public class AppDbContext : DbContext
{
 public DbSet<Product> Products { get; set; }
}

Di sini, Products bertindak sebagai kumpulan untuk melakukan operasi CRUD. EF menggunakan konteks ini untuk melacak status objek dan menghasilkan perintah SQL di SaveChanges() .

4) Apa yang dimaksud dengan migrasi di Entity Framework dan bagaimana cara penggunaannya?

Migrasi adalah mekanisme untuk melacak dan menerapkan perubahan skema ke database dari waktu ke waktu. Seiring berkembangnya model Anda, migrasi membantu menjaga database tetap sinkron tanpa mengubah skrip SQL secara manual. Dengan Code First, Anda menggunakan perintah seperti:

Add-Migration InitialCreate
Update-Database

Ini menghasilkan kelas migrasi yang menentukan perubahan skema dan menerapkannya ke database. Migrasi memungkinkan kontrol versi untuk skema database dan memfasilitasi pengembangan kolaboratif.

5) Jelaskan Pemuatan Lambat, Pemuatan Bersemangat, dan Pemuatan Eksplisit.

Memuat data terkait secara efisien sangat penting di EF. Berikut perbandingannya:

Strategi Saat Berjalan Penggunaan Biasa Pemuatan Lambat Data terkait dimuat pada akses pertamaGunakan saat data terkait mungkin tidak selalu diperlukan.Eager Loading Data terkait dimuat di muka melalui .Include() Gunakan saat Anda tahu Anda membutuhkan data terkait.Pemuatan Eksplisit Dimuat secara manual setelah kueriMemberikan kendali atas kapan tepatnya data terkait dimuat.

Misalnya:

var orders = context.Orders.Include(o => o.Customer).ToList(); // Eager

Pemuatan lambat membantu mengurangi kueri awal, namun dapat menyebabkan N+1 masalah kueri jika tidak digunakan dengan hati-hati.

6) Apa yang dimaksud dengan pelacakan perubahan di Entity Framework?

Pelacakan perubahan adalah mekanisme internal EF untuk memantau perubahan status entitas setelah kueri dijalankan. Ketika suatu entitas diambil oleh DbContext , itu dilacak. Setiap modifikasi pada propertinya dicatat, dan ketika SaveChanges() dipanggil, EF menghasilkan INSERT SQL yang sesuai , UPDATE , atau DELETE pernyataan. Untuk skenario hanya-baca yang tidak memerlukan pelacakan, AsNoTracking() meningkatkan kinerja dengan menonaktifkan pelacakan perubahan.

7) Bagaimana Entity Framework menangani konflik konkurensi?

Kontrol konkurensi memastikan bahwa beberapa pengguna yang memperbarui data yang sama tidak saling menimpa perubahan secara tidak sengaja. EF menggunakan konkurensi optimis secara default. Pendekatan umum melibatkan penambahan token konkurensi (seperti RowVersion stempel waktu). EF memeriksa token ini selama SaveChanges() , dan jika berbeda dengan versi database, DbUpdateConcurrencyException dilempar, menunjukkan konflik. Pengembang kemudian dapat menangani pengecualian ini untuk mencoba lagi atau menyelesaikan perbedaan data.

8) Apa yang dimaksud dengan properti navigasi di EF?

Properti navigasi menentukan hubungan antar entitas. Mereka memungkinkan EF untuk menavigasi asosiasi (misalnya, satu-ke-banyak) tanpa gabungan manual:

public class Order
{
 public int Id { get; set; }
 public Customer Customer { get; set; }
}

Di sini, Customer adalah properti navigasi yang menghubungkan Order ke Customer terkaitnya . EF menggunakan properti ini untuk membangun hubungan dan bergabung secara otomatis selama kueri. Properti navigasi berfungsi bersama dengan kunci asing untuk mencontohkan hubungan.

9) Apa tujuan AsNoTracking()?

AsNoTracking() menonaktifkan pelacakan perubahan untuk suatu kueri, yang bermanfaat untuk hanya-baca operasi di mana Anda tidak bermaksud memperbarui entitas yang diambil. Hal ini meningkatkan kinerja dengan mengurangi penggunaan memori dan pelacakan overhead. Hal ini sangat berguna ketika mengambil kumpulan data besar tanpa memodifikasinya.

10) Apa yang dimaksud dengan kueri yang dikompilasi dan kapan sebaiknya Anda menggunakannya?

Kueri yang dikompilasi adalah teknik pengoptimalan kinerja. Saat kueri LINQ dijalankan, EF biasanya menerjemahkannya ke dalam SQL setiap kali. Dengan kueri yang dikompilasi, terjemahan ini dilakukan satu kali, dan delegasi yang dihasilkan digunakan kembali — mengurangi overhead untuk kueri yang sering dijalankan atau rumit. Gunakan di lalu lintas tinggi skenario di mana kueri yang sama dijalankan berulang kali dengan parameter berbeda.

11) Apa yang dimaksud dengan status entitas dalam Entity Framework, dan bagaimana pengaruhnya terhadap SaveChanges()?

Entity Framework melacak status setiap entitas untuk menentukan operasi database apa yang akan dilakukan selama SaveChanges() . Status entitas utama adalah:

Negara Bagian Deskripsi Operasi Dipicu Ditambahkan Entitas baru yang akan dimasukkanINSERT Dimodifikasi Entitas yang ada diperbaruiUPDATE Dihapus Entitas yang ditandai untuk dihapusDELETE Tidak berubah Tidak ada perubahan yang terdeteksiTidak adaTerpisah Tidak dilacak berdasarkan konteksTidak ada

Saat Anda menelepon SaveChanges() , EF memeriksa status entitas dan menjalankan perintah SQL yang sesuai. Misalnya, entitas baru ditambahkan ke DbSet akan ditandai Ditambahkan , menghasilkan INSERT permintaan.

Contoh:

context.Entry(product).State = EntityState.Modified;
context.SaveChanges();

Tindakan ini secara eksplisit memperbarui catatan database untuk entitas tersebut.

Memahami keadaan memastikan kontrol yang lebih baik terhadap sinkronisasi dan kinerja data.

12) Apa kelebihan dan kekurangan menggunakan Entity Framework?

Entity Framework memberikan banyak manfaat namun juga memiliki beberapa trade-off, bergantung pada kasus penggunaan Anda.

Kelebihan Kekurangan Menyederhanakan akses data melalui LINQ dan model objek. Overhead kinerja dibandingkan dengan ADO.NET mentah. Mengurangi kode SQL boilerplate. Kueri kompleks dapat menghasilkan SQL yang tidak efisien. Mendukung banyak penyedia basis data. Lebih sulit untuk men-debug pernyataan SQL yang dihasilkan. Diketik dengan kuat, meningkatkan keamanan waktu kompilasi. Kemungkinan konflik migrasi dalam tim besar. Memungkinkan pembuatan prototipe cepat dengan Kode Pertama. Kurangnya kontrol atas kueri yang disesuaikan.

Untuk sistem skala besar yang memerlukan kinerja maksimum, pengembang masih dapat menggabungkan SQL mentah dengan EF untuk optimasi.

13) Bagaimana Entity Framework menangani hubungan (satu-ke-satu, satu-ke-banyak, banyak-ke-banyak)?

Entity Framework mengelola hubungan melalui properti navigasi dan asosiasi kunci asing .

Jenis-jenis hubungan tersebut adalah:

Jenis Hubungan Deskripsi Contoh Satu lawan Satu Setiap instance entitas memiliki satu entitas terkait.UserUserProfile Satu-ke-Banyak Satu entitas berhubungan dengan beberapa entitas lainnya.CustomerOrders Banyak-ke-Banyak Beberapa entitas berhubungan satu sama lain.StudentCourse

Contoh Satu-ke-Banyak hubungan:

public class Customer
{
 public int CustomerId { get; set; }
 public ICollection<Order> Orders { get; set; }
}

EF secara otomatis membuat kunci asing dan menangani aturan penghapusan bertingkat tergantung pada konfigurasi.

Anda juga dapat menggunakan API Lancar untuk pemetaan hubungan yang lebih eksplisit.

14) Apa perbedaan antara LINQ ke Entitas dan LINQ ke SQL?

Fitur LINQ ke Entitas LINQ ke SQL Database yang DidukungBeberapa (SQL Server, Oracle, MySQL, dll.)Hanya SQL ServerKerangka DasarEntity FrameworkADO.NETModelModel Entitas KonseptualHanya tabel databasePemetaanPemetaan kompleks (warisan, asosiasi)Pemetaan tabel langsungDukungan Masa DepanDidukung secara aktifTidak digunakan lagi

LINQ ke Entitas adalah bagian dari Entity Framework dan lebih serbaguna, sedangkan LINQ ke SQL terbatas pada SQL Server dan kasus penggunaan yang lebih sederhana.

Oleh karena itu, LINQ to Entities direkomendasikan untuk pengembangan tingkat perusahaan.

15) Apa perbedaan antara ObjectContext dan DbContext?

Fitur Konteks Objek Konteks Db Kerangka Versi EF sebelumnyaAPI yang disederhanakan dalam EF 4.1+KompleksitasLebih bertele-teleRingan dan mudahKinerjaSedikit lebih cepat namun lebih sulit untuk digunakanSederhana dengan overhead minimalPelacakan Perubahan diperlukan konfigurasi manualPelacakan otomatisPenggunaan PilihanSistem warisanProyek EF / EF Core modern

DbContext membungkus ObjectContext secara internal tetapi menyediakan API yang lebih bersih dan intuitif. Sebagian besar aplikasi .NET saat ini harus menggunakan DbContext .

16) Menjelaskan siklus hidup suatu entitas di Entity Framework.

Siklus hidup suatu entitas menggambarkan transisi keadaan-nya dari penciptaan hingga ketekunan:

  1. Kreasi – Entitas dipakai dalam memori (status:Terpisah ).
  2. Lampiran – Ditambahkan ke konteks melalui DbSet.Add() (sebutkan:Ditambahkan ).
  3. Modifikasi – Perubahan terdeteksi secara otomatis (status:Dimodifikasi ).
  4. KegigihanSaveChanges() dipanggil → Perintah SQL dijalankan.
  5. Penghapusan – Entitas ditandai sebagai Dihapus dan dihapus dari database.

Memahami siklus hidup ini membantu dalam men-debug masalah data dan mengoptimalkan manajemen konteks EF.

17) Apa gunanya Fluent API di Entity Framework?

API Lancar menyediakan cara terprogram untuk mengonfigurasi hubungan model, batasan, dan pemetaan, yang sering digunakan di OnModelCreating() metode DbContext Anda .

Ini memberikan kontrol menyeluruh atas konfigurasi yang anotasi data tidak bisa diungkapkan.

Contoh:

modelBuilder.Entity<Customer>()
 .HasMany(c => c.Orders)
 .WithOne(o => o.Customer)
 .HasForeignKey(o => o.CustomerId);

Fluent API sangat berguna untuk mengonfigurasi kunci komposit , hubungan banyak ke banyak , dan aturan bertingkat .

18) Apa yang dimaksud dengan Anotasi Data dalam Entity Framework?

Anotasi Data adalah atribut diterapkan langsung ke kelas model atau properti untuk menentukan perilaku skema. Mereka lebih sederhana dibandingkan Fluent API namun kurang fleksibel.

Contoh:

public class Product
{
 [Key]
 public int ProductId { get; set; }
 [Required]
 [StringLength(50)]
 public string Name { get; set; }
}

Anotasi menentukan kunci, panjang string, bidang wajib, dan hubungan. Untuk kasus tingkat lanjut, pengembang biasanya menggabungkan Anotasi Data dan API Lancar .

19) Apa perbedaan antara entitas terlacak dan tidak terlacak di EF Core?

Ketik Deskripsi Kasus Penggunaan Entitas yang Dilacak Dipantau oleh DbContext untuk perubahan.Perilaku default untuk pembaruan.Entitas Tidak Terlacak Tidak dipantau; diambil dengan .AsNoTracking() .Ideal untuk operasi hanya-baca.

Entitas yang dilacak menggunakan lebih banyak memori tetapi memungkinkan EF mendeteksi perubahan secara otomatis.

Entitas yang tidak dilacak meningkatkan kinerja dalam skenario dengan tingkat pembacaan tinggi dan tingkat pembaruan rendah.

20) Bagaimana cara mengeksekusi kueri SQL mentah di Entity Framework?

Entity Framework memungkinkan eksekusi SQL mentah untuk kueri khusus atau yang penting bagi kinerja.

var result = context.Products
 .FromSqlRaw("SELECT * FROM Products WHERE Price > 100")
 .ToList();

Untuk perintah non-kueri:

context.Database.ExecuteSqlRaw("DELETE FROM Products WHERE Discontinued = 1");

Gunakan fitur ini dengan hati-hati untuk menghindari injeksi SQL dan menjaga fleksibilitas database-agnostik.

21) Apa perbedaan antara Entity Framework dan Entity Framework Core?

Entity Framework (EF) dan Entity Framework Core (EF Core) berbeda dalam arsitektur, kemampuan, dan dukungan lintas platform.

Fitur Kerangka Entitas 6 (EF6) Inti Kerangka Entitas Platform.NET Framework sajaCross-platform (.NET 5/6/7)ArsitekturBerdasarkan ObjekKonteksRingan dan modularKinerjaLebih lambat dalam beberapa kueriPembuatan kueri yang dioptimalkanDukungan LINQDewasa namun terbatasPenerjemahan dan asinkron yang ditingkatkanPenyedia Basis DataSQL Server, OracleBeberapa (MySQL, PostgreSQL, SQLite, dll.)FiturDewasa (misalnya, pemuatan lambat)Modern (misalnya, properti bayangan, filter global)

EF Core adalah yang modern dan dikembangkan secara aktif versi dan pilihan yang disarankan untuk proyek .NET baru karena fleksibilitas dan kinerjanya.

22) Bagaimana cara kerja transaksi di Entity Framework?

Transaksi di Entity Framework memastikan integritas data ketika beberapa operasi harus berhasil atau gagal secara bersamaan. Secara default, EF membungkus SaveChanges() di dalam suatu transaksi. Untuk kontrol manual:

using (var transaction = context.Database.BeginTransaction())
{
 try
 {
 context.Customers.Add(new Customer());
 context.SaveChanges();
 context.Orders.Add(new Order());
 context.SaveChanges();
 transaction.Commit();
 }
 catch
 {
 transaction.Rollback();
 }
}

Hal ini memastikan atomisitas — jika ada perintah yang gagal, semua perubahan akan dibatalkan.

EF juga terintegrasi dengan System.Transactions untuk dukungan transaksi terdistribusi.

23) Menjelaskan strategi pewarisan TPH, TPT, dan TPC dalam Entity Framework.

Entity Framework mendukung tiga strategi pemetaan warisan utama untuk memodelkan hierarki kelas.

Strategi Deskripsi Contoh Kelebihan Kekurangan TPH (Tabel Per Hierarki) Semua kelas berbagi satu meja; kolom pembeda mengidentifikasi jenis.Umum di EF Core.Kueri sederhana dan cepat.Tabel bisa menjadi besar dan jarang.TPT (Tabel Per Jenis) Setiap subkelas memiliki tabelnya sendiri. Setiap kelas turunan dipetakan secara terpisah. Skema dinormalisasi. Penggabungan lebih lambat pada hierarki besar.TPC (Tabel Per Kelas Beton) Setiap kelas memiliki tabelnya sendiri dengan kolom duplikat. Setiap entitas dipetakan secara terpisah. Pembacaan kinerja tinggi. Redundansi data.

Sebagian besar pengembang lebih memilih TPH karena kesederhanaannya, kecuali normalisasi atau kebutuhan kinerja menentukan sebaliknya.

24) Bagaimana Anda menangani penyesuaian kinerja di Entity Framework?

Untuk mengoptimalkan kinerja Entity Framework:

  1. Gunakan AsNoTracking() untuk kueri hanya-baca.
  2. Muatan yang penuh semangat hanya entitas terkait yang diperlukan dengan .Include() .
  3. Hindari kueri N+1 menggunakan proyeksi atau Select() .
  4. Gunakan kueri yang dikompilasi untuk operasi yang sering dijalankan.
  5. Gabungkan beberapa sisipan/pembaruan dengan AddRange() dan SaveChanges() .
  6. Nonaktifkan Deteksi OtomatisPerubahan untuk operasi massal:context.Configuration.AutoDetectChangesEnabled = false;
  7. Gunakan cache dan penomoran halaman untuk kumpulan data besar.

Implementasi EF yang disesuaikan dengan baik dapat mendekati kinerja ADO.NET sekaligus mempertahankan produktivitas pengembang.

25) Apa yang dimaksud dengan properti bayangan di Entity Framework Core?

Sebuah properti bayangan ada di model EF tetapi tidak di kelas entitas. Itu dikelola oleh EF di pelacak perubahan dan disimpan dalam database.

Contoh:

modelBuilder.Entity<Order>()
 .Property<DateTime>("LastUpdated");

Hal ini memungkinkan EF untuk menyimpan metadata tambahan (misalnya stempel waktu, info audit) tanpa mengubah kelas entitas.

Anda dapat mengakses properti bayangan melalui:

var value = context.Entry(order).Property("LastUpdated").CurrentValue;

Properti bayangan ideal untuk skenario logging atau audit.

26) Apa yang dimaksud dengan pengonversi nilai di EF Core?

Pengonversi nilai di EF Core memungkinkan transformasi nilai properti saat membaca atau menulis ke database.

Misalnya, untuk menyimpan enum sebagai string:

modelBuilder.Entity<Employee>()
 .Property(e => e.Status)
 .HasConversion(
 v => v.ToString(),
 v => (EmployeeStatus)Enum.Parse(typeof(EmployeeStatus), v));

Hal ini meningkatkan fleksibilitas untuk tipe data khusus seperti enum , bool , atau DateTimeOffset .

Pengonversi nilai juga digunakan untuk enkripsi, kompresi, atau penyembunyian data sensitif.

27) Apa itu filter kueri global, dan bagaimana cara kerjanya?

Filter kueri global memungkinkan penerapan ketentuan secara otomatis ke semua kueri untuk suatu entitas.

Hal ini khususnya berguna untuk penghapusan sementara atau multi-penyewa .

Contoh:

modelBuilder.Entity<Employee>()
 .HasQueryFilter(e => !e.IsDeleted);

Setiap kueri dieksekusi terhadap Employee secara otomatis mengecualikan data yang dihapus untuk sementara, kecuali jika diganti secara eksplisit.

Filter global meningkatkan kemudahan pemeliharaan dan keamanan data.

28) Bagaimana cara menguji kode Entity Framework menggunakan pengujian unit?

Untuk menguji unit logika EF tanpa mengenai database sebenarnya, gunakan database dalam memori atau mengejek :

Pengujian unit harus memvalidasi:

Pengujian dengan EF Core InMemory memastikan kecepatan dan menghindari ketergantungan pada SQL Server.

29) Menjelaskan pola Repositori dan Unit Kerja di EF.

Kedua pola arsitektur ini membantu akses data abstrak dan menjaga konsistensi transaksional .

Pola Tujuan Contoh Implementasi Repositori Meringkas operasi CRUD untuk setiap entitas.IRepository<T> antarmuka dengan Add() , GetAll() , dll.Unit Kerja Mengkoordinasikan beberapa repositori dalam suatu transaksi.SaveChanges() bertindak sebagai batas komit.

Contoh:

public class UnitOfWork : IUnitOfWork
{
 private readonly AppDbContext _context;
 public void Commit() => _context.SaveChanges();
}

Pola ini meningkatkan kemampuan diuji , penggunaan kembali kode , dan pemisahan masalah dalam aplikasi perusahaan besar.

30) Apa perbedaan antara pemuatan bersemangat dan pemuatan proyeksi?

Aspek Muat Bersemangat Pemuatan Proyeksi TujuanMuat data terkait dimukaHanya memuat bidang atau properti tertentuMetode.Include() .Select() Contohcontext.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name }) KinerjaMengambil objek penuhMengambil data minimalGunakan KasusSaat entitas terkait diperlukan untuk pemrosesanSaat Anda membutuhkan data ringan yang spesifik

Pemuatan proyeksi adalah pengoptimalan kinerja yang mengurangi overhead memori dengan hanya memilih kolom yang diperlukan.

31) Apa yang dimaksud dengan interseptor di Entity Framework Core?

Pencegat di EF Core memungkinkan pengembang mencegat dan memodifikasi operasi database seperti eksekusi kueri, pembuatan perintah, dan pembukaan koneksi .

Mereka bertindak sebagai komponen middleware antara EF dan penyedia database.

Contoh: Mencatat semua perintah SQL yang dijalankan.

public class CommandInterceptor : DbCommandInterceptor
{
 public override void ReaderExecuting(
 DbCommand command,
 CommandEventData eventData,
 InterceptionResult<DbDataReader> result)
 {
 Console.WriteLine($"Executing SQL: {command.CommandText}");
 base.ReaderExecuting(command, eventData, result);
 }
}

Anda mendaftarkannya di DbContextOptionsBuilder :

optionsBuilder.AddInterceptors(new CommandInterceptor());

Manfaat:

32) Bagaimana EF Core menangani operasi asinkron?

Entity Framework Core sepenuhnya mendukung pemrograman asinkron melalui metode seperti SaveChangesAsync() , ToListAsync() , dan FirstOrDefaultAsync() .

Eksekusi asinkron membantu meningkatkan skalabilitas dalam aplikasi web dengan melepaskan thread sambil menunggu operasi database terikat I/O.

Contoh:

var customers = await context.Customers
 .Where(c => c.IsActive)
 .ToListAsync();

Operasi asinkron sangat efektif pada ASP.NET Core API dengan throughput tinggi dan layanan mikro, mengurangi pemblokiran panggilan, dan meningkatkan waktu respons.

33) Apa yang dimaksud dengan ketahanan koneksi di Entity Framework Core?

Ketahanan koneksi membantu aplikasi Anda memulihkan secara otomatis dari kegagalan database sementara , seperti gangguan jaringan atau waktu tunggu SQL habis.

Ini dapat dikonfigurasi sebagai berikut:

optionsBuilder.UseSqlServer(
 connectionString,
 options => options.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null)
);

Di sini, EF akan mencoba kembali operasi yang gagal hingga 5 kali dengan penundaan.

Hal ini khususnya berguna di lingkungan yang dihosting di cloud seperti Azure SQL di mana kesalahan sementara sering terjadi.

34) Apa saja jenis entitas yang dimiliki di EF Core?

Entitas yang dimiliki mengizinkan pemodelan objek nilai yang bergantung sepenuhnya pada siklus hidup entitas lain.

Mereka berbagi tabel yang sama dengan pemiliknya dan tidak dapat berdiri sendiri.

Contoh:

public class Address
{
 public string Street { get; set; }
 public string City { get; set; }
}
public class Customer
{
 public int Id { get; set; }
 public Address Address { get; set; }
}

Konfigurasi:

modelBuilder.Entity<Customer>().OwnsOne(c => c.Address);

Kasus Penggunaan:

Konsep pemodelan seperti Alamat , Uang , atau Pengukuran yang tidak mempunyai identitas sendiri.

35) Bagaimana cara menerapkan penghapusan sementara di Entity Framework Core?

Penghapusan sementara menandai rekaman sebagai dihapus, bukan menghapusnya secara fisik.

Mereka diimplementasikan menggunakan bendera boolean dan filter kueri global .

modelBuilder.Entity<Employee>()
 .HasQueryFilter(e => !e.IsDeleted);

Dalam operasi penghapusan:

employee.IsDeleted = true;
context.Update(employee);
context.SaveChanges();

Keuntungan:

Kekurangan:

36) Apa model yang dikompilasi di EF Core dan mengapa digunakan?

Di EF Core 6+, model yang dikompilasi memungkinkan pra-kompilasi metadata model EF ke dalam rakitan .NET, sehingga mengurangi waktu startup dan overhead waktu proses.

Langkah-langkah:

  1. Jalankan perintah:dotnet ef dbcontext optimize
  2. EF menghasilkan file model yang telah dikompilasi sehingga aplikasi dimuat lebih cepat saat runtime.

Manfaat: Mengurangi latensi inisialisasi sebesar 30–40%, terutama pada aplikasi besar dengan banyak entitas.

Kasus Penggunaan: Layanan mikro berperforma tinggi dan lingkungan tanpa server.

37) Bagaimana cara mengimplementasikan caching di Entity Framework?

Caching membantu mengurangi permintaan database yang berulang. Ada dua level utama:

Ketik Deskripsi Contoh Cache tingkat pertama Terintegrasi, per DbContext instanceCache tingkat kedua yang dikelola secara otomatis Cache eksternal dibagikan lintas konteksGunakan pustaka seperti EFCoreSecondLevelCacheInterceptor

Contoh untuk cache tingkat kedua:

services.AddEFSecondLevelCache(options =>
{
 options.UseMemoryCacheProvider().DisableLogging(false);
});

Hal ini secara signifikan meningkatkan kinerja dalam aplikasi yang banyak membaca dengan menghindari hit database yang berlebihan.

38) Bagaimana cara EF Core mengelola token konkurensi dan stempel waktu?

Token konkurensi mencegah pembaruan yang bertentangan di lingkungan multi-pengguna.

Anda dapat menandai properti sebagai token konkurensi menggunakan [ConcurrencyCheck] atau [Timestamp] atribut.

Contoh:

public class Product
{
 public int Id { get; set; }
 [Timestamp]
 public byte[] RowVersion { get; set; }
}

Ketika pembaruan terjadi, EF menyertakan kolom ini di WHERE klausa.

Jika nilainya tidak cocok, DbUpdateConcurrencyException dilemparkan — memastikan kontrol konkurensi yang optimis .

39) Bagaimana Anda menerapkan audit (pelacakan yang dibuat, diubah, dihapus) di EF Core?

Pengauditan melacak metadata seperti siapa yang membuat, memodifikasi, atau menghapus catatan.

Anda dapat mengganti SaveChanges() :

public override int SaveChanges()
{
 var entries = ChangeTracker.Entries()
 .Where(e => e.Entity is IAuditable && 
 (e.State == EntityState.Added || e.State == EntityState.Modified));
 foreach (var entry in entries)
 {
 var auditable = (IAuditable)entry.Entity;
 auditable.LastModified = DateTime.UtcNow;
 }
 return base.SaveChanges();
}

Antarmuka:

public interface IAuditable
{
 DateTime Created { get; set; }
 DateTime LastModified { get; set; }
}

Metode ini memusatkan logika audit, memastikan tata kelola data yang konsisten .

40) Apa saja praktik terbaik dalam menggunakan Entity Framework dalam aplikasi perusahaan?

Kategori Praktik Terbaik Manfaat Kinerja Gunakan AsNoTracking() dan proyeksi untuk kueri hanya-baca. Mengurangi overhead.Desain Menerapkan pola Repositori dan Unit Kerja.Meningkatkan kemudahan pemeliharaan.Keamanan Gunakan kueri berparameter untuk menghindari injeksi SQL. Perlindungan data.Skalabilitas Gunakan metode pengumpulan koneksi dan asinkron. Menangani beban tinggi.Migrasi Gunakan migrasi otomatis dengan kontrol versi. Menyederhanakan pengelolaan skema.Konfigurasi Eksternalisasikan string dan rahasia koneksi. Isolasi lingkungan yang lebih baik.Pengujian Gunakan penyedia InMemory untuk pengujian unit. Pengujian berjalan lebih cepat.Logging Aktifkan EF logging untuk wawasan kinerja. Proses debug lebih mudah.

Praktik-praktik ini memastikan kuat, terukur, dan mudah dikelola aplikasi yang dibangun di Entity Framework.

41) Bagaimana cara mengoptimalkan kueri LINQ untuk terjemahan SQL yang lebih baik di Entity Framework?

Entity Framework secara otomatis mengonversi kueri LINQ ke SQL, namun pola yang tidak efisien dapat menghasilkan SQL yang lambat atau berlebihan. Mengoptimalkan LINQ memastikan ORM menghasilkan kueri database yang berkinerja baik.

Teknik Pengoptimalan:

Gunakan Proyeksi:

  1. Pilih hanya kolom yang diperlukan, bukan seluruh entitas.
var customers = context.Customers
 .Select(c => new { c.Id, c.Name })
 .ToList();
Hindari Evaluasi Sisi Klien:
Selalu pastikan pemfilteran terjadi di SQL , tidak dalam memori. EF Core memperingatkan ketika evaluasi dilakukan di sisi klien.Gunakan AsNoTracking() untuk data hanya-baca.
var orders = context.Orders.AsNoTracking().ToList();
Manfaatkan Kueri Terkompilasi untuk operasi LINQ yang berulang.Hindari .Include() yang tidak perlu panggilan — hanya menyertakan data terkait bila diperlukan.

Contoh:

Tidak efisien:

context.Customers.ToList().Where(c => c.IsActive);

Efisien:

context.Customers.Where(c => c.IsActive).ToList();

42) Apa saja cara lain untuk memasukkan data awal ke EF Core?

Penyemaian data memastikan database memiliki data default atau referensi saat dibuat.

Pendekatan 1:Menggunakan ModelBuilder

modelBuilder.Entity<Role>().HasData(
 new Role { Id = 1, Name = "Admin" },
 new Role { Id = 2, Name = "User" }
);

Ini memasukkan data secara otomatis selama Update-Database .

Pendekatan 2:Metode Benih Khusus

Jalankan kode secara manual saat startup:

context.Database.Migrate();
if (!context.Users.Any())
{
 context.Users.Add(new User { Name = "Admin" });
 context.SaveChanges();
}

Pendekatan 3:Skrip SQL

Gunakan SQL mentah dalam migrasi:

migrationBuilder.Sql("INSERT INTO Roles (Name) VALUES ('Admin')");

Rekomendasi:
Gunakan HasData() untuk data referensi statis dan penyemaian terprogram untuk data startup dinamis.

43) Bagaimana cara EF Core mengelola penyedia database secara internal?

EF Core adalah penyedia-agnostik , artinya dapat menargetkan beberapa mesin basis data melalui paket penyedia basis data terpisah .

Penyedia Umum:

Penyedia Paket NuGet Basis Data SQL ServerMicrosoft.EntityFrameworkCore.SqlServer MSSQLSQLiteMicrosoft.EntityFrameworkCore.Sqlite Seluler/DesktopPostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL PostgreSQLMySQLPomelo.EntityFrameworkCore.MySql MySQLCosmos DBMicrosoft.EntityFrameworkCore.Cosmos TanpaSQL

Secara internal, EF Core menggunakan lapisan abstraksi untuk:

Setiap penyedia mengimplementasikan kelasnya sendiri yang mewarisi abstraksi dasar EF Core (misalnya, RelationalDatabaseProvider , QuerySqlGenerator ).

44) Apa yang dimaksud dengan “kueri terpisah” dan kapan sebaiknya Anda menggunakannya?

Kueri terpisah mencegah EF melakukan penggabungan yang besar dan kompleks dengan mengeksekusi beberapa kueri SQL, bukan satu.

Contoh:

var customers = context.Customers
 .Include(c => c.Orders)
 .AsSplitQuery()
 .ToList();

Ini dijalankan:

  1. Kueri 1 → Dapatkan Pelanggan
  2. Kueri 2 → Dapatkan Pesanan yang terkait dengan pelanggan tersebut

Manfaat:

Kekurangan:

Beberapa kali bolak-balik ke database.

Gunakan kueri terpisah ketika ingin memuat data terkait berukuran besar yang dapat menyebabkan masalah memori.

45) Bagaimana Anda dapat memantau perintah SQL yang dihasilkan EF secara efektif?

Memantau SQL membantu men-debug kueri yang lambat dan mengoptimalkan perilaku ORM.

Metode untuk Mencatat SQL:

  1. Pencatatan Log Konsol
optionsBuilder
 .UseSqlServer(conn)
 .LogTo(Console.WriteLine, LogLevel.Information);
Integrasi ILoggerFactory
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
optionsBuilder.UseLoggerFactory(loggerFactory);
Pencegat Terapkan DbCommandInterceptor untuk mencatat perintah dan pengaturan waktu.Alat Pembuatan Profil Gunakan alat seperti:

Logging harus diaktifkan secara selektif dalam produksi untuk menghindari overhead kinerja.

46) Apa perbedaan antara ChangeTracker.DetectChanges() dan AutoDetectChangesEnabled?

Fitur DetectChanges() AutoDetectChangesEnabled TypeMethodPropertyPurposeForces EF untuk memindai entitas yang dilacak dan mendeteksi perubahanMengaktifkan/menonaktifkan deteksi perubahan otomatisDefaultManualTrueUsageExplicitly memanggil optimasi kinerjaNonaktifkan untuk pembaruan massal

Contoh:

context.ChangeTracker.AutoDetectChangesEnabled = false;
foreach (var item in list)
{
 context.Add(item);
}
context.SaveChanges();

Menonaktifkan deteksi otomatis dalam loop akan meningkatkan kinerja hingga 40% dalam operasi massal.

47) Bagaimana cara menggunakan tabel temporal dengan EF Core?

Tabel temporal (diperkenalkan di SQL Server 2016) memungkinkan Anda melacak data historis secara otomatis.

Langkah-langkah:

  1. Aktifkan dukungan sementara dalam migrasi:
builder.Entity<Employee>()
 .ToTable("Employees", b => b.IsTemporal());
Data historis kueri:
var history = context.Employees
 .TemporalAsOf(DateTime.UtcNow.AddDays(-7))
 .ToList();

Keuntungan:

EF Core 6+ mendukung kueri temporal penuh.

48) Bagaimana EF Core mendukung kueri yang dikompilasi dan model yang dibuat sebelumnya secara bersamaan?

Kueri terkompilasi dan model terkompilasi adalah dua fitur kinerja yang saling melengkapi.

Fitur Tujuan Hasil terjemahan kueri QueryCache yang Dikompilasi Model yang Dikompilasi Metadata model yang telah dikompilasi sebelumnya

Contoh Kueri Terkompilasi:

static readonly Func<AppDbContext, int, Customer> _getCustomerById =
 EF.CompileQuery((AppDbContext ctx, int id) =>
 ctx.Customers.FirstOrDefault(c => c.Id == id));

Penggunaan:

var customer = _getCustomerById(context, 5);

Bersama: Model yang dikompilasi mengurangi biaya awal , sementara kueri yang dikompilasi mengurangi overhead kueri waktu proses — ideal untuk kueri frekuensi tinggi .

49) Apa kendala umum saat menggunakan EF dalam arsitektur layanan mikro?

Kesalahan Umum:

  1. DbContext Bersama di Seluruh Layanan
    → Melanggar isolasi layanan mikro.
    → Setiap layanan mikro harus memiliki DbContext dan skemanya sendiri.
  2. Komunikasi Cerewet (Kueri N+1)
    → Minimalkan kueri EF per panggilan API.
  3. Pemuatan Bersemangat Berlebihan
    → Muat hanya yang diperlukan melalui DTO.
  4. Centralized Migrations
    → Each service should manage its own migrations independently.
  5. Lack of Transactional Boundaries
    → Use distributed transactions (Outbox pattern) if cross-service consistency is required.
  6. Tight Coupling to SQL Provider
    → Use repository abstraction to keep flexibility in database choice.

50) How does dependency injection integrate with DbContext in ASP.NET Core?

Entity Framework integrates seamlessly with ASP.NET Core’s built-in Dependency Injection (DI) system.

Setup:

services.AddDbContext<AppDbContext>(options =>
 options.UseSqlServer(Configuration.GetConnectionString("Default")));

Then inject it into controllers or services:

public class CustomerService
{
 private readonly AppDbContext _context;
 public CustomerService(AppDbContext context)
 {
 _context = context;
 }
}

Lifetimes:

Lifetime Deskripsi Recommended For ScopedOne context per HTTP requestDefaultTransientNew instance every timeBackground jobsSingletonShared globallyAvoid (not thread-safe)

Using DI ensures testability, lifecycle management , and resource efficiency across web and background processes.

🔍 Top Entity Framework Interview Questions with Real-World Scenarios &Strategic Responses

1) What is Entity Framework, and why is it used in enterprise applications?

Expected from candidate: The interviewer wants to assess your foundational understanding of Entity Framework and its value in real-world applications.

Example answer: Entity Framework is an Object-Relational Mapping framework for .NET that allows developers to work with databases using .NET objects instead of raw SQL. It is used in enterprise applications to improve productivity, reduce boilerplate data access code, and maintain a strong separation of concerns.

2) Can you explain the difference between Code First, Database First, and Model First approaches?

Expected from candidate: The interviewer wants to evaluate your knowledge of different development workflows and when to use each one.

Example answer: Code First starts with domain classes and generates the database from code. Database First begins with an existing database and generates entity classes. Model First uses a visual designer to define the model and then creates both code and database. Each approach is chosen based on project requirements and existing infrastructure.

3) How does Entity Framework handle relationships between tables?

Expected from candidate: The interviewer is checking your understanding of data modeling and relational mapping.

Example answer: Entity Framework handles relationships using navigation properties and foreign keys. It supports one-to-one, one-to-many, and many-to-many relationships, allowing developers to traverse related data using object references rather than joins.

4) Describe a situation where you improved database performance using Entity Framework.

Expected from candidate: The interviewer wants to hear a practical example demonstrating optimization skills.

Example answer: In my previous role, I improved performance by reducing unnecessary eager loading and implementing projection queries with Select statements. This minimized the amount of data retrieved from the database and significantly reduced query execution time.

5) How do you manage migrations in Entity Framework?

Expected from candidate: The interviewer is assessing your experience with schema changes and version control.

Example answer: Migrations are managed using the built-in migration tools that track model changes over time. At a previous position, I regularly generated and reviewed migration scripts before applying them to ensure database integrity across environments.

6) What is lazy loading, and when would you avoid using it?

Expected from candidate: The interviewer wants to test your understanding of data loading strategies and performance trade-offs.

Example answer: Lazy loading automatically loads related data when it is accessed. I would avoid using it in performance-critical scenarios or APIs because it can cause multiple unintended database calls, leading to the N+1 query problem.

7) How do you handle transactions in Entity Framework?

Expected from candidate: The interviewer is evaluating your knowledge of data consistency and error handling.

Example answer: Entity Framework supports transactions through the DbContext and TransactionScope. At my previous job, I used explicit transactions to ensure that multiple related database operations either completed successfully together or were rolled back in case of failure.

8) Explain how dependency injection is used with Entity Framework.

Expected from candidate: The interviewer wants to see how well you understand modern application architecture.

Example answer: Dependency injection is used to inject the DbContext into services or controllers. This improves testability and maintainability by allowing the context to be mocked or replaced without changing business logic.

9) Describe a challenging bug you encountered with Entity Framework and how you resolved it.

Expected from candidate: The interviewer is looking for problem-solving ability and debugging skills.

Example answer: In my last role, I encountered an issue with tracking conflicts when updating detached entities. I resolved it by explicitly setting entity states and ensuring that only one instance of each entity was tracked by the context.

10) How do you decide when Entity Framework is not the right tool?

Expected from candidate: The interviewer wants to understand your judgment and ability to choose appropriate technologies.

Example answer: I consider alternatives when applications require extremely high-performance data access or complex stored procedure logic. In such cases, using a micro-ORM or raw ADO.NET can provide more control and efficiency.


Bahasa C

  1. Cara Mengunduh dan Menginstal Visual Studio untuk C# di Windows
  2. 50 Pertanyaan dan Jawaban Wawancara C# Teratas untuk Pengalaman &Mahasiswa Baru (Pembaruan 2021)
  3. C - Struktur Program
  4. Ikhtisar C++
  5. C# Queue dengan Contoh:Apa itu C# Queue dan Bagaimana Cara Menggunakannya?
  6. C# - Refleksi
  7. Pernyataan istirahat C#
  8. C - Pengecoran Tipe
  9. C# if, if...else, if...else if dan Nested if Statement
  10. C# - Atribut