50 Pertanyaan dan Jawaban Wawancara Entity Framework Teratas (2026)

Persiapan untuk wawancara Entity Framework berarti mengantisipasi pertanyaan-pertanyaan yang mengungkap kemampuan sebenarnya. Pertanyaan Wawancara Entity Framework mengungkapkan cara berpikir, kesadaran kinerja, dan bagaimana kandidat menerjemahkan konsep ke dalam praktik.
Menguasai Entity Framework membuka berbagai peran di bidang pengembangan modern, mulai dari platform berbasis data hingga layanan cloud. Paparan praktis membangun kemampuan analitis, memperkuat kedalaman teknis, dan mendukung tim. Para pemimpin perekrutan menghargai pemecahan masalah secara langsung, desain yang skalabel, pembimbingan junior, dan jalur pertumbuhan bagi lulusan baru. Baca lebih banyakโฆ
๐ Unduh PDF Gratis: Pertanyaan & Jawaban Wawancara Entity Framework
Pertanyaan dan Jawaban Wawancara Entity Framework Teratas
1) Apa itu Entity Framework dan mengapa digunakan?
Entity Framework (EF) adalah MicrosoftORM (Object-Relational Map)ping) kerangka kerja untuk .NET yang menyederhanakan interaksi basis data dengan memungkinkan pengembang untuk bekerja dengan data sebagai objek .NET yang bertipe kuat, bukan SQL mentah.. Otot perut initracEF memungkinkan pengembang untuk melakukan operasi CRUD (Create, Read, Update, Delete) menggunakan konstruksi C# yang sudah dikenal, dan kerangka kerja ini menangani penerjemahan operasi tersebut menjadi kueri SQL yang dioptimalkan di balik layar. EF mengurangi kode akses data yang berulang, meningkatkan pemeliharaan, dan membantu menegakkan keamanan tipe pada waktu kompilasi.
Sebagai contoh, alih-alih menulis SQL, Anda dapat menggunakan:
var customers = context.Customers.Where(c => c.IsActive).ToList();
EF akan menerjemahkan kueri LINQ ini ke dalam SQL, mengeksekusinya terhadap basis data, dan mengembalikan hasilnya sebagai objek.
2) Jelaskan perbedaan antara Code Pertama, pendekatan Database First, dan Model First.
Entity Framework mendukung tiga pendekatan pengembangan utama:
| Pendekatan | Kapan Harus Digunakan | Apa yang terjadi |
|---|---|---|
| Code Pertama | Proyek baru atau desain berbasis domain | Anda mendefinisikan kelas entitas. EF menghasilkan skema basis data dari kode. |
| Basis Data Pertama | Basis data yang ada | EF menghasilkan kelas entitas dan konteks dari skema yang sudah ada. |
| Model Pertama | Jika Anda lebih menyukai desain visual | Anda mendesain model di perancang visual (Entity Designer), dan EF akan menghasilkan kelas dan basis data. |
Setiap pendekatan cocok untuk skenario yang berbeda: Code Pertama populer dalam pengembangan agile, Basis Data Pertama lebih disukai untuk basis data lama, dan Model Pertama cocok untuk kasus-kasus di mana pemodelan visual penting.
3) Apa itu DbContext dan apa perannya dalam EF?
DbContext adalah kelas utama yang mengelola sesi dengan basis data, tracPerubahan entitas ks, dan koordinat menyimpan data kembali ke basis data. Ini mewakili jembatan antara aplikasi C# Anda dan basis data. Melalui DbContext, Anda mendefinisikan DbSet<TEntity> properti, yang mewakili kumpulan entitas dan dipetakan ke tabel dalam basis data.
Contoh:
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
Di sini, Products Berfungsi sebagai koleksi untuk melakukan operasi CRUD. EF menggunakan konteks ini untuk track keadaan objek dan menghasilkan perintah SQL pada SaveChanges().
4) Apa itu migrasi dalam Entity Framework dan bagaimana cara penggunaannya?
Migrasi merupakan mekanisme untuk track dan terapkan perubahan skema ke basis data seiring waktu. Seiring berkembangnya model Anda, migrasi membantu menjaga basis data tetap sinkron tanpa perlu memodifikasi skrip SQL secara manual. Dengan Code Pertama, Anda menggunakan perintah seperti:
Add-Migration InitialCreate Update-Database
Ini menghasilkan kelas migrasi yang mendefinisikan perubahan skema dan menerapkannya ke basis data. Migrasi memungkinkan kontrol versi untuk skema basis data dan memfasilitasi pengembangan kolaboratif.
5) Jelaskan tentang Lazy Loading, Eager Loading, dan Explicit Loading.
Memuat data terkait secara efisien sangat penting di EF. Berikut perbandingannya:
| Penyelarasan | Saat Berjalan | Penggunaan Khas |
|---|---|---|
| malas Memuat | Data terkait dimuat pada akses pertama. | Gunakan saat data terkait mungkin tidak selalu dibutuhkan. |
| Memuat dengan penuh semangat | Data terkait dimuat di muka melalui .Include() |
Gunakan saat Anda yakin membutuhkan data terkait. |
| Pemuatan Eksplisit | Dimuat secara manual setelah kueri | Memberikan kendali penuh atas kapan tepatnya data terkait dimuat. |
Sebagai contoh:
var orders = context.Orders.Include(o => o.Customer).ToList(); // Eager
Lazy loading membantu mengurangi kueri awal, tetapi dapat menyebabkan Masalah kueri N+1 jika tidak digunakan dengan hati-hati.
6) Apa itu perubahan? tracRaja di Entity Framework?
Perubahan tracRaja adalah mekanisme internal EF untuk Memantau perubahan status entitas. setelah sebuah kueri dieksekusi. Ketika sebuah entitas diambil oleh DbContext, ini tracked. Setiap modifikasi pada propertinya dicatat, dan ketika SaveChanges() Saat dipanggil, EF akan menghasilkan SQL yang sesuai. INSERT, UPDATE, atau DELETE pernyataan. Untuk skenario hanya baca di mana tracRaja tidak diperlukan, AsNoTracking() meningkatkan kinerja dengan menonaktifkan perubahan tracraja.
7) Bagaimana Entity Framework menangani konflik konkurensi?
Kontrol konkurensi memastikan bahwa beberapa pengguna yang memperbarui data yang sama tidak secara tidak sengaja menimpa perubahan satu sama lain. EF menggunakan konkurensi optimis Secara default. Pendekatan umum melibatkan penambahan token konkurensi (seperti RowVersion (cap waktu). EF memeriksa token ini selama SaveChanges(), dan jika berbeda dari versi basis data, maka DbUpdateConcurrencyException Pengecualian ini muncul, menandakan adanya konflik. Pengembang kemudian dapat menangani pengecualian ini untuk mencoba lagi atau menyelesaikan perbedaan data.
8) Apa itu properti navigasi di EF?
Properti navigasi mendefinisikan hubungan antar entitas. Properti ini memungkinkan EF untuk menavigasi asosiasi (misalnya, satu-ke-banyak) tanpa penggabungan manual:
public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
}
Di sini, Customer adalah properti navigasi yang menghubungkan Order terkait dengannya CustomerEF menggunakan properti-properti ini untuk membangun relasi dan penggabungan secara otomatis selama kueri. Properti navigasi bekerja bersamaan dengan properti navigasi. kunci asing untuk memodelkan hubungan.
9) Apa tujuan dari AsNo?Tracraja()?
AsNoTracking() menonaktifkan perubahan tracraja untuk sebuah pertanyaan, yang bermanfaat bagi read-only operasi di mana Anda tidak bermaksud untuk memperbarui entitas yang diambil. Ini meningkatkan kinerja dengan mengurangi penggunaan memori dan tracIni sangat berguna saat mengambil kumpulan data besar tanpa memodifikasinya.
10) Apa itu kueri terkompilasi dan kapan Anda harus menggunakannya?
Kueri terkompilasi adalah teknik optimasi kinerja. Saat kueri LINQ dieksekusi, EF biasanya menerjemahkannya ke SQL setiap kali. Dengan kueri terkompilasi, penerjemahan ini dilakukan sekali, dan delegasi yang dihasilkan digunakan kembali โ mengurangi overhead untuk kueri yang sering dieksekusi atau kompleks. Gunakan kueri ini dalam lalu lintas tinggi skenario di mana kueri yang sama dijalankan berulang kali dengan parameter yang berbeda.
11) Apa itu entity state dalam Entity Framework, dan bagaimana pengaruhnya terhadap SaveChanges()?
Kerangka Entitas tracks setiap entitas negara untuk menentukan operasi basis data apa yang akan dilakukan selama SaveChanges(). Keadaan entitas utama adalah:
| Negara | Uraian Teknis | Operation Dipicu |
|---|---|---|
| Ditambahkan | Entitas baru akan disisipkan | INSERT |
| Diubah | Entitas yang ada telah diperbarui. | UPDATE |
| Dihapus | Entitas yang ditandai untuk dihapus | DELETE |
| Tidak berubah | Tidak ada perubahan yang terdeteksi. | None |
| Terpisah | Tidak tracberdasarkan konteks | None |
Saat Anda menelepon SaveChanges()EF memeriksa status entitas dan mengeksekusi perintah SQL yang sesuai. Misalnya, entitas baru yang ditambahkan ke suatu DbSet akan ditandai Ditambahkan, menghasilkan INSERT pertanyaan.
Contoh:
context.Entry(product).State = EntityState.Modified; context.SaveChanges();
Ini secara eksplisit memperbarui catatan basis data untuk entitas tersebut.
Memahami keadaan Memastikan kontrol yang lebih baik atas sinkronisasi data dan kinerja.
12) Apa saja kelebihan dan kekurangan menggunakan Entity Framework?
Entity Framework menawarkan banyak manfaat, tetapi juga beberapa kekurangan, tergantung pada kasus penggunaan Anda.
| Kelebihan | Kekurangan |
|---|---|
| Menyederhanakan akses data melalui LINQ dan model objek. | Beban kinerja dibandingkan dengan ADO.NET murni. |
| Mengurangi kode SQL berulang. | Kueri yang kompleks dapat menghasilkan SQL yang tidak efisien. |
| Mendukung berbagai penyedia basis data. | Lebih sulit untuk melakukan debugging pada pernyataan SQL yang dihasilkan. |
| Bertipe data yang kuat, meningkatkan keamanan pada saat kompilasi. | Konflik migrasi dalam tim besar mungkin terjadi. |
| Memungkinkan pembuatan prototipe cepat.ping dengan Code Pertama. | Less kontrol atas kueri yang disesuaikan dengan detail. |
Untuk sistem berskala besar yang membutuhkan kinerja maksimal, pengembang masih dapat melakukan pencampuran. SQL mentah dengan EF untuk optimasi.
13) Bagaimana Entity Framework menangani relasi (satu-ke-satu, satu-ke-banyak, banyak-ke-banyak)?
Entity Framework mengelola relasi melalui properti navigasi ke asosiasi kunci asing.
Jenis-jenis hubungan tersebut adalah:
| Jenis hubungan | Uraian Teknis | Example |
|---|---|---|
| Satu-ke-satu | Setiap instance entitas memiliki satu entitas terkait. | User โ UserProfile |
| Satu-ke-Banyak | Satu entitas berhubungan dengan banyak entitas lainnya. | Customer โ Orders |
| Banyak-ke-Banyak | Banyak entitas yang saling berhubungan. | Student โ Course |
Contoh dari a Satu-ke-Banyak hubungan:
public class Customer
{
public int CustomerId { get; set; }
public ICollection<Order> Orders { get; set; }
}
EF secara otomatis menghasilkan kunci asing dan menanganinya. aturan penghapusan berjenjang tergantung pada konfigurasi.
Anda juga dapat menggunakan API Lancar untuk peta hubungan yang lebih eksplisitping.
14) Apa perbedaan antara LINQ to Entities dan LINQ to SQL?
| Fitur | LINQ ke Entitas | LINQ ke SQL |
|---|---|---|
| Basis Data yang Didukung | Beberapa (SQL Server, Oracle, MySQL, Dll) | Hanya SQL Server |
| Kerangka Kerja yang Mendasari | Kerangka Entitas | ADO.NET |
| Pilih Model | Model Entitas Konseptual | Hanya tabel basis data |
| Lokasiping | Peta kompleksping (warisan, hubungan) | Peta tabel langsungping |
| Dukungan Masa Depan | Didukung secara aktif | Ditinggalkan |
LINQ ke Entitas merupakan 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 | ObjectContext | DbContext |
|---|---|---|
| Kerangka | Versi EF sebelumnya | API yang disederhanakan di EF 4.1+ |
| Kompleksitas | Lebih bertele-tele | Ringan dan mudah |
| Performance | Sedikit lebih cepat tetapi lebih sulit digunakan. | Disederhanakan dengan biaya operasional minimal. |
| Perubahan Tracraja | Konfigurasi manual diperlukan | secara otomatis tracraja |
| Penggunaan Pilihan | Sistem warisan | Proyek EF / EF Core modern |
DbContext membungkus bagian dalam ObjectContext Namun, ia menyediakan API yang lebih bersih dan intuitif. Sebagian besar aplikasi .NET saat ini sebaiknya menggunakan DbContext.
16) Jelaskan siklus hidup sebuah entitas dalam Entity Framework.
Siklus hidup suatu entitas menggambarkan transisi negara dari penciptaan hingga keberlanjutan:
- Penciptaan โ Entitas diinstansiasi dalam memori (status: Terpisah).
- Lampiran โ Ditambahkan ke konteks melalui
DbSet.Add()(negara: Ditambahkan). - Modifikasi โ Perubahan terdeteksi secara otomatis (status: Diubah).
- Ketekunan -
SaveChanges()Dipanggil โ Perintah SQL dieksekusi. - penghapusan โ Entitas ditandai sebagai Dihapus dan dihapus dari basis data.
Memahami siklus hidup ini membantu dalam men-debug masalah data dan mengoptimalkan manajemen konteks EF.
17) Apa kegunaan Fluent API di Entity Framework?
The API Lancar menyediakan cara terprogram untuk mengkonfigurasi hubungan model, batasan, dan pemetaan.pings, sering digunakan dalam OnModelCreating() metode Anda DbContext.
Ini memberikan kontrol yang lebih rinci 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 ampuh untuk melakukan konfigurasi. kunci komposit, hubungan banyak-ke-banyak, dan aturan kaskade.
18) Apa itu Anotasi Data di Entity Framework?
Anotasi Data adalah atribut Diterapkan langsung pada kelas atau properti model untuk mendefinisikan perilaku skema. API ini lebih sederhana daripada Fluent API tetapi kurang fleksibel.
Contoh:
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
}
Anotasi mendefinisikan kunci, panjang string, kolom yang wajib diisi, dan relasi. Untuk kasus yang lebih lanjut, pengembang biasanya menggabungkannya. Anotasi Data ke API Lancar.
19) Apa perbedaan antara tracked dan untracEntitas ked di EF Core?
| Tipe | Uraian Teknis | Use Case |
|---|---|---|
| TracEntitas ked | Dipantau oleh DbContext untuk perubahan. |
Perilaku default untuk pembaruan. |
| UntracEntitas ked | Tidak dipantau; diambil dengan .AsNoTracking(). |
Ideal untuk operasi baca saja. |
TracEntitas ked mengonsumsi lebih banyak memori tetapi memungkinkan EF untuk mendeteksi perubahan secara otomatis.
Untracentitas ked meningkatkan prestasi dalam skenario dengan tingkat pembacaan tinggi dan pembaruan rendah.
20) Bagaimana cara mengeksekusi kueri SQL mentah di Entity Framework?
Entity Framework memungkinkan eksekusi SQL mentah untuk kueri khusus atau kueri yang sangat penting untuk performa.
var result = context.Products
.FromSqlRaw("SELECT * FROM Products WHERE Price > 100")
.ToList();
Untuk perintah selain kueri:
context.Database.ExecuteSqlRaw("DELETE FROM Products WHERE Discontinued = 1");
Gunakan fitur ini dengan hati-hati untuk menghindari Injeksi SQL dan mempertahankan fleksibilitas yang tidak bergantung pada basis data tertentu.
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 | Entity Framework 6 (EF6) | Inti Kerangka Entitas |
|---|---|---|
| Platform | Hanya .NET Framework | Lintas platform (.NET 5/6/7) |
| Architekstur | Berdasarkan ObjectContext | Ringan dan modular |
| Performance | Lebih lambat pada beberapa kueri | Pembuatan kueri yang dioptimalkan |
| Dukungan LINQ | Dewasa namun terbatas | Terjemahan dan asynchronous yang lebih baik |
| Penyedia Basis Data | SQLServer, Oracle | Banyak (MySQL, PostgreSQL, SQLite, Dll) |
| Fitur | Matang (misalnya, lazy loading) | Modern (misalnya, properti bayangan, filter global) |
EF Core adalah modern, berkembang secara aktif Versi ini merupakan pilihan yang direkomendasikan untuk proyek .NET baru karena fleksibilitas dan performanya.
22) Bagaimana cara kerja transaksi di Entity Framework?
Transaksi dalam Entity Framework memastikan integritas data ketika beberapa operasi harus berhasil atau gagal secara bersamaan. Secara default, EF membungkus SaveChanges() di dalam sebuah 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();
}
}
Ini memastikan atomisitas โ jika ada perintah yang gagal, semua perubahan akan dikembalikan.
EF juga terintegrasi dengan Sistem.Transaksi untuk dukungan transaksi terdistribusi.
23) Jelaskan strategi pewarisan TPH, TPT, dan TPC dalam Entity Framework.
Entity Framework mendukung tiga peta pewarisan utama.ping Strategi untuk memodelkan hierarki kelas.
| Penyelarasan | Uraian Teknis | Example | Kelebihan | Kekurangan |
|---|---|---|---|---|
| TPH (Tabel Per Hierarki) | Semua kelas menggunakan satu tabel yang sama; kolom diskriminator mengidentifikasi tipenya. | Umum di EF Core. | Kueri sederhana dan cepat. | Tabel mungkin menjadi besar dan jarang diisi. |
| TPT (Tabel Per Jenis) | Setiap subkelas memiliki tabelnya sendiri. | Setiap kelas turunan dipetakan secara terpisah. | Skema yang dinormalisasi. | Penggabungan yang lebih lambat pada hierarki besar. |
| TPC (Tabel Per Kelas Beton) | Setiap kelas memiliki tabelnya sendiri dengan kolom yang duplikat. | Setiap entitas dipetakan secara terpisah. | Pembacaan berkinerja tinggi. | Redundansi data. |
Sebagian besar pengembang lebih menyukai TPH karena kesederhanaannya, kecuali jika normalisasi atau kebutuhan kinerja menentukan sebaliknya.
24) Bagaimana Anda menangani penyetelan performa di Entity Framework?
Untuk mengoptimalkan kinerja Entity Framework:
- penggunaan
AsNoTracking()untuk kueri hanya baca. - Beban yang bersemangat hanya entitas terkait yang diperlukan dengan
.Include(). - Hindari kueri N+1 menggunakan proyeksi atau
Select(). - Gunakan kueri yang telah dikompilasi. untuk operasi yang sering dijalankan.
- Melakukan penyisipan/pembaruan secara massal. dengan
AddRange()keSaveChanges(). - Nonaktifkan Deteksi Perubahan Otomatis untuk operasi massal:
context.Configuration.AutoDetectChangesEnabled = false; - Gunakan caching dan paginasi. untuk set data besar.
Implementasi EF yang disetel dengan baik dapat mendekati performa ADO.NET sambil tetap mempertahankan produktivitas pengembang.
25) Apa yang dimaksud dengan shadow property di Entity Framework Core?
A properti bayangan Ada di dalam model EF tetapi tidak di dalam kelas entitas. Hal ini dikelola oleh EF dalam perubahan. tracker dan disimpan dalam basis data.
Contoh:
modelBuilder.Entity<Order>()
.Property<DateTime>("LastUpdated");
Hal ini memungkinkan EF untuk menyimpan metadata tambahan (misalnya, stempel waktu, informasi audit) tanpa memodifikasi kelas entitas.
Anda dapat mengakses properti bayangan melalui:
var value = context.Entry(order).Property("LastUpdated").CurrentValue;
Properti shadow sangat ideal untuk skenario pencatatan atau audit.
26) Apa itu konverter nilai di EF Core?
Konverter nilai di EF Core memungkinkan transformasi nilai properti saat membaca dari atau menulis ke basis data.
Sebagai contoh, 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.
Konverter nilai juga digunakan untuk enkripsi, kompresi, atau penyamaran dari data sensitif.
27) Apa itu filter kueri global, dan bagaimana cara kerjanya?
Filter kueri global memungkinkan penerapan kondisi secara otomatis ke semua kueri untuk suatu entitas.
Ini sangat berguna untuk penghapusan lunak or multi-tenancy.
Contoh:
modelBuilder.Entity<Employee>()
.HasQueryFilter(e => !e.IsDeleted);
Setiap kueri yang dieksekusi terhadap Employee Secara otomatis mengecualikan catatan yang dihapus sementara, kecuali jika secara eksplisit diubah.
Filter global meningkatkan kemudahan pemeliharaan dan keamanan data.
28) Bagaimana cara menguji kode Entity Framework menggunakan unit test?
Untuk melakukan pengujian unit pada logika EF tanpa mengakses basis data sungguhan, gunakan database dalam memori or mengejek:
- Opsi 1: Penyedia InMemory
var options = new DbContextOptionsBuilder<AppDbContext>() .UseInMemoryDatabase("TestDb") .Options; - Opsi 2: Mock DbContext
MengejekDbSetmenggunakan pustaka seperti Dari kuantitatif untuk pengujian terisolasi.
Pengujian unit harus memvalidasi:
- Keakuratan kueri (melalui LINQ)
- Konsistensi data setelah
SaveChanges() - Logika repositori
Pengujian dengan EF Core InMemory memastikan kecepatan dan menghindari ketergantungan pada SQL Server.
29) Jelaskan pola Repositori dan Unit Kerja di EF.
Kedua pola arsitektur ini membantu abstracakses data t ke menjaga konsistensi transaksional.
| pola | Tujuan | Contoh Implementasi |
|---|---|---|
| Gudang | Merangkum operasi CRUD untuk setiap entitas. | IRepository<T> antarmuka dengan Add(), GetAll(), Dll |
| Unit Kerja | Mengkoordinasikan beberapa repositori dalam satu transaksi. | SaveChanges() bertindak sebagai batas komitmen. |
Contoh:
public class UnitOfWork : IUnitOfWork
{
private readonly AppDbContext _context;
public void Commit() => _context.SaveChanges();
}
Pola-pola ini membaik kemampuan untuk diuji, penggunaan kembali kode, dan pemisahan masalah dalam aplikasi perusahaan besar.
30) Apa perbedaan antara eager loading dan projection loading?
| Aspek | Memuat dengan penuh semangat | Proyeksi Pemuatan |
|---|---|---|
| Tujuan | Memuat data terkait di awal. | Hanya memuat bidang atau properti tertentu |
| metode | .Include() |
.Select() |
| Example | context.Orders.Include(o => o.Customer) |
context.Orders.Select(o => new { o.Id, o.Customer.Name }) |
| Performance | Mengambil objek lengkap | Mengambil data minimal |
| Use Case | Ketika entitas terkait diperlukan untuk pemrosesan | Saat Anda membutuhkan data ringan yang spesifik. |
Pemuatan proyeksi adalah optimasi kinerja yang mengurangi beban memori dengan hanya memilih kolom yang diperlukan.
31) Apa itu interceptor di Entity Framework Core?
Interceptor di EF Core memungkinkan pengembang untuk mencegat dan memodifikasi operasi basis data seperti eksekusi kueri, pembuatan perintah, dan pembukaan koneksi.
Mereka bertindak sebagai komponen middleware antara EF dan penyedia basis data.
Contoh: Mencatat semua perintah SQL yang telah dieksekusi.
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:
- Pencatatan log yang ditingkatkan
- Keamanan (validasi kueri)
- Audit dan kinerja tracraja
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 saat menunggu operasi basis data yang terikat I/O.
Contoh:
var customers = await context.Customers
.Where(c => c.IsActive)
.ToListAsync();
Operasi asinkron sangat efektif dalam pemrosesan data dengan throughput tinggi. API ASP.NET Core dan layanan mikro, mengurangi panggilan yang menghambat dan meningkatkan waktu respons.
33) Apa yang dimaksud dengan ketahanan koneksi di Entity Framework Core?
Ketahanan koneksi membantu aplikasi Anda. Pulihkan secara otomatis dari kegagalan basis data sementara., seperti gangguan jaringan atau waktu tunggu SQL.
Hal 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 sangat berguna dalam lingkungan yang dihosting di cloud 'like' Azure SQL di mana kesalahan sementara sering terjadi.
34) Apa saja tipe entitas yang dimiliki di EF Core?
Entitas yang dimiliki memungkinkan pemodelan objek nilai yang sepenuhnya bergantung pada siklus hidup entitas lain.
Mereka berbagi meja 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);
Gunakan Kasus:
Konsep pemodelan seperti Alamat, Uang, atau Measurement yang tidak memiliki identitas sendiri.
35) Bagaimana cara mengimplementasikan penghapusan lunak (soft delete) di Entity Framework Core?
Penghapusan lunak menandai data sebagai terhapus alih-alih menghapusnya secara fisik.
Implementasinya menggunakan sebuah bendera boolean ke filter kueri global.
modelBuilder.Entity<Employee>()
.HasQueryFilter(e => !e.IsDeleted);
Pada operasi penghapusan:
employee.IsDeleted = true; context.Update(employee); context.SaveChanges();
Keuntungan:
- Pelestarian data historis
- Pemulihan lebih mudah
kekurangan:
- Tabel basis data yang lebih besar
- Membutuhkan logika penyaringan yang cermat.
36) Apa yang dimaksud dengan model terkompilasi dalam EF Core dan mengapa digunakan?
Di EF Core 6+, model yang dikompilasi Memungkinkan pra-kompilasi metadata model EF ke dalam assembly .NET, mengurangi waktu startup dan overhead runtime.
Tangga:
- Jalankan perintah:
dotnet ef dbcontext optimize - EF menghasilkan file model yang telah dikompilasi sebelumnya sehingga aplikasi dapat memuatnya lebih cepat saat dijalankan.
Manfaat: Mengurangi latensi inisialisasi sebesar 30โ40%, terutama pada aplikasi besar dengan banyak entitas.
Gunakan Kasus: Layanan mikro berkinerja tinggi dan lingkungan tanpa server.
37) Bagaimana cara mengimplementasikan caching di Entity Framework?
Caching membantu mengurangi kueri basis data yang berulang. Ada dua tingkatan utama:
| Tipe | Uraian Teknis | Example |
|---|---|---|
| Cache tingkat pertama | Terpasang, menurut DbContext contoh |
Dikelola secara otomatis |
| Cache tingkat kedua | Cache eksternal yang digunakan bersama di berbagai konteks. | Gunakan perpustakaan seperti EFCoreSecondLevelCacheInterceptor |
Contoh untuk caching tingkat kedua:
services.AddEFSecondLevelCache(options =>
{
options.UseMemoryCacheProvider().DisableLogging(false);
});
Hal ini secara signifikan meningkatkan kinerja dalam aplikasi yang banyak membaca dengan menghindari akses basis data yang berlebihan.
38) Bagaimana EF Core mengelola token konkurensi dan stempel waktu?
Token konkurensi mencegah pembaruan yang saling bertentangan dalam lingkungan multi-pengguna.
Anda dapat menandai properti sebagai token konkurensi menggunakan [ConcurrencyCheck] or [Timestamp] atribut.
Contoh:
public class Product
{
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
Saat terjadi pembaruan, EF menyertakan kolom ini di dalamnya. WHERE ayat.
Jika nilainya tidak cocok, maka... DbUpdateConcurrencyException dilemparkan โ memastikan kontrol konkurensi optimis.
39) Bagaimana Anda menerapkan audit (dibuat, dimodifikasi, dihapus)? tracraja) di EF Core?
Audit tracmetadata ks seperti siapa yang membuat, memodifikasi, atau menghapus Catatan.
Anda dapat menimpa 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();
}
Interface:
public interface IAuditable
{
DateTime Created { get; set; }
DateTime LastModified { get; set; }
}
Metode ini memusatkan logika audit, sehingga memastikan tata kelola data yang konsisten.
40) Apa saja praktik terbaik untuk menggunakan Entity Framework dalam aplikasi perusahaan?
| Kategori | Praktek terbaik | Manfaat |
|---|---|---|
| Performance | penggunaan AsNoTracking() dan proyeksi untuk kueri hanya baca. |
Mengurangi biaya operasional. |
| Mendesain | Implementasikan pola Repository dan Unit of Work. | Meningkatkan kemudahan perawatan. |
| Security | Gunakan kueri berparameter untuk menghindari injeksi SQL. | Perlindungan data. |
| Skalabilitas | Gunakan kumpulan koneksi (connection pooling) dan metode asinkron. | Mampu menangani beban tinggi. |
| Migrasi | Gunakan migrasi otomatis dengan kontrol versi. | Menyederhanakan manajemen skema. |
| konfigurasi | Eksternalkan string koneksi dan rahasia. | Isolasi lingkungan yang lebih baik. |
| pengujian | Gunakan provider InMemory untuk unit test. | Pengujian yang lebih cepat. |
| Logging | Aktifkan pencatatan EF untuk mendapatkan wawasan kinerja. | Mempermudah proses debugging. |
Praktik-praktik ini memastikan kokoh, terukur, dan mudah dipelihara aplikasi yang dibangun di atas Entity Framework.
41) Bagaimana Anda dapat mengoptimalkan kueri LINQ untuk terjemahan SQL yang lebih baik di Entity Framework?
Entity Framework secara otomatis mengkonversi kueri LINQ ke SQL, tetapi pola yang tidak efisien dapat menghasilkan SQL yang lambat atau berlebihan. Mengoptimalkan LINQ memastikan ORM menghasilkan kueri basis data yang berkinerja tinggi.
Teknik Optimasi:
Gunakan Proyeksi:
- Pilih hanya kolom yang dibutuhkan, bukan seluruh entitas.
- Hindari Evaluasi dari Sisi Klien:
Selalu pastikan penyaringan terjadi. dalam SQL, tidak ada di memori. EF Core memberikan peringatan ketika evaluasi dilakukan di sisi klien. - penggunaan
AsNoTracking()untuk data baca-saja. - Manfaatkan Kueri yang Telah Dikompilasi untuk operasi LINQ yang berulang.
- Hindari yang tidak perlu
.Include()panggilan โ hanya sertakan data terkait jika diperlukan.
var customers = context.Customers
.Select(c => new { c.Id, c.Name })
.ToList();
var orders = context.Orders.AsNoTracking().ToList();
Contoh:
Tidak efisien:
context.Customers.ToList().Where(c => c.IsActive);
Efisien:
context.Customers.Where(c => c.IsActive).ToList();
42) Apa saja berbagai cara untuk memasukkan data awal di EF Core?
Pengisian data awal memastikan basis data 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 Kustom
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:
penggunaan HasData() untuk data referensi statis dan pengisian data secara terprogram untuk data startup dinamis.
43) Bagaimana EF Core mengelola penyedia basis data secara internal?
EF Core adalah tidak bergantung pada penyedia, artinya dapat menargetkan beberapa mesin basis data melalui cara terpisah. paket penyedia basis data.
Penyedia Umum:
| Penyedia | NuGet Paket | Basis Data |
|---|---|---|
| SQL Server | Microsoft.EntityFrameworkCore.SqlServer |
MSSQL |
| SQLite | Microsoft.EntityFrameworkCore.Sqlite |
Seluler/Desktop |
| PostgreSQL | Npgsql.EntityFrameworkCore.PostgreSQL |
PostgreSQL |
| MySQL | Pomelo.EntityFrameworkCore.MySql |
MySQL |
| Kosmos DB | Microsoft.EntityFrameworkCore.Cosmos |
NoSQL |
Secara internal, EF Core menggunakan abstraclapisan tion untuk:
- Terjemahan kueri
- Pembuatan perintah SQL
- Peta tipe dataping
Setiap penyedia mengimplementasikan kelasnya sendiri yang mewarisi dari kelas dasar EF Core.tractions (misalnya, RelationalDatabaseProvider, QuerySqlGenerator).
44) Apa yang dimaksud dengan โsplit query,โ dan kapan Anda harus menggunakannya?
Kueri yang terpisah mencegah EF melakukan sambungan besar dan kompleks dengan mengeksekusi beberapa kueri SQL, bukan hanya satu.
Contoh:
var customers = context.Customers
.Include(c => c.Orders)
.AsSplitQuery()
.ToList();
Ini menjalankan:
- Kueri 1 โ Dapatkan Pelanggan
- Kueri 2 โ Dapatkan Pesanan yang terkait dengan pelanggan tersebut
Manfaat:
- Mencegah hasil perkalian Kartesius yang besar.
- Meningkatkan kinerja dengan kumpulan data terkait yang besar.
Kekurangan:
Beberapa kali perjalanan bolak-balik ke basis data.
penggunaan kueri terpisah Saat melakukan eager loading data terkait dalam jumlah besar, hal itu dapat menyebabkan masalah memori.
45) Bagaimana Anda dapat memantau perintah SQL yang dihasilkan EF secara efektif?
Pemantauan SQL membantu men-debug kueri yang lambat dan mengoptimalkan perilaku ORM.
Metode untuk Mencatat SQL:
- Pencatatan Konsol
- Integrasi ILoggerFactory
- Pencegat Implementasi VE
DbCommandInterceptoruntuk mencatat perintah dan waktu. - Alat Profil Gunakan alat seperti:
- Profil Mini
- Profiler SQL Server
- EFCorePowerTools
optionsBuilder
.UseSqlServer(conn)
.LogTo(Console.WriteLine, LogLevel.Information);
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); optionsBuilder.UseLoggerFactory(loggerFactory);
Pencatatan log harus dilakukan diaktifkan secara selektif dalam produksi untuk menghindari beban kinerja berlebih.
46) Apa perbedaan antara PerubahanTracker.DetectChanges() dan AutoDetectChangesEnabled?
| Fitur | DetectChanges() |
AutoDetectChangesEnabled |
|---|---|---|
| Tipe | metode | Milik |
| Tujuan | Memaksa EF untuk memindai tracentitas ked dan mendeteksi perubahan | Mengaktifkan/menonaktifkan deteksi perubahan otomatis |
| Default | panduan | Benar |
| penggunaan | Secara eksplisit meminta optimasi kinerja. | Nonaktifkan untuk pembaruan massal |
Contoh:
context.ChangeTracker.AutoDetectChangesEnabled = false;
foreach (var item in list)
{
context.Add(item);
}
context.SaveChanges();
Menonaktifkan deteksi otomatis dalam perulangan 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 untuk tracdata historis k otomatis.
Tangga:
- Aktifkan dukungan temporal dalam migrasi:
- Meng querying data historis:
builder.Entity<Employee>()
.ToTable("Employees", b => b.IsTemporal());
var history = context.Employees
.TemporalAsOf(DateTime.UtcNow.AddDays(-7))
.ToList();
Keuntungan:
- Riwayat data bawaan tracraja
- Audit dan kepatuhan
- Tidak memerlukan pemicu manual.
EF Core 6+ mendukung kueri temporal penuh.
48) Bagaimana EF Core mendukung kueri yang dikompilasi dan model yang telah dibuat sebelumnya secara bersamaan?
Kueri yang dikompilasi dan model yang dikompilasi adalah dua hal yang berbeda. fitur kinerja yang saling melengkapi.
| Fitur | Tujuan |
|---|---|
| Kueri yang Dikompilasi | Hasil terjemahan kueri cache |
| Model yang Dikompilasi | Prakompilasi metadata model |
Contoh Kueri yang Dikompilasi:
static readonly Func<AppDbContext, int, Customer> _getCustomerById =
EF.CompileQuery((AppDbContext ctx, int id) =>
ctx.Customers.FirstOrDefault(c => c.Id == id));
Pemakaian:
var customer = _getCustomerById(context, 5);
Bersama: Model yang dikompilasi mengurangi biaya awal, sementara kueri yang dikompilasi mengurangi beban kueri saat runtime โ ideal untuk kueri frekuensi tinggi.
49) Apa saja kesalahan umum yang sering terjadi saat menggunakan EF dalam arsitektur microservices?
Kesalahan Umum:
- DbContext Bersama di Seluruh Layanan
โ Melanggar isolasi microservice.
โ Setiap microservice harus memiliki DbContext dan skema tersendiri. - Komunikasi Bertele-tele (N+1 Pertanyaan)
โ Minimalkan kueri EF per panggilan API. - Pemuatan Berlebihan
โ Muat hanya data yang dibutuhkan melalui DTO. - Migrasi Terpusat
โ Setiap layanan harus mengelola migrasinya sendiri secara independen. - Kurangnya Batasan Transaksional
โ Gunakan transaksi terdistribusi (pola Outbox) jika konsistensi antar layanan diperlukan. - Keterkaitan Erat dengan Penyedia SQL
โ Gunakan repositori abstracuntuk menjaga fleksibilitas dalam pemilihan basis data.
50) Bagaimana dependency injection terintegrasi dengan DbContext di ASP.NET Core?
Entity Framework terintegrasi dengan mulus dengan Injeksi Ketergantungan (DI) bawaan ASP.NET Core sistem.
Setup:
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Default")));
Kemudian, suntikkan ke dalam controller atau service:
public class CustomerService
{
private readonly AppDbContext _context;
public CustomerService(AppDbContext context)
{
_context = context;
}
}
Masa hidup:
| Lifetime | Uraian Teknis | Direkomendasikan untuk |
|---|---|---|
| Lingkup | Satu konteks per permintaan HTTP | Default |
| Sementara | Instansi baru setiap saat | Pekerjaan latar belakang |
| tunggal | Dibagikan secara global | Hindari (tidak aman untuk thread) |
Penggunaan DI memastikan kemampuan uji, manajemen siklus hidup, dan efisiensi sumber daya di seluruh proses web dan latar belakang.
๐ Pertanyaan Wawancara Entity Framework Teratas dengan Skenario Dunia Nyata & Jawaban Strategis
1) Apa itu Entity Framework, dan mengapa digunakan dalam aplikasi perusahaan?
Diharapkan dari kandidat: Pewawancara ingin menilai pemahaman dasar Anda tentang Entity Framework dan nilainya dalam aplikasi dunia nyata.
Contoh jawaban: Entity Framework adalah sebuah Peta Objek-Relasional.ping Sebuah framework untuk .NET yang memungkinkan pengembang untuk bekerja dengan basis data menggunakan objek .NET, bukan SQL mentah. Framework ini digunakan dalam aplikasi perusahaan untuk meningkatkan produktivitas, mengurangi kode akses data yang berulang, dan mempertahankan pemisahan tanggung jawab yang kuat.
2) Bisakah Anda menjelaskan perbedaan antara Code Pertama, pendekatan Database First, dan Model First?
Diharapkan dari kandidat: Pewawancara ingin mengevaluasi pengetahuan Anda tentang berbagai alur kerja pengembangan dan kapan harus menggunakan masing-masing alur kerja tersebut.
Contoh jawaban: Code Pertama, pendekatan ini dimulai dengan kelas domain dan menghasilkan basis data dari kode. Pendekatan Database First dimulai dengan basis data yang sudah ada dan menghasilkan kelas entitas. Pendekatan Model First menggunakan perancang visual untuk mendefinisikan model dan kemudian membuat kode dan basis data. Setiap pendekatan dipilih berdasarkan persyaratan proyek dan infrastruktur yang ada.
3) Bagaimana Entity Framework menangani relasi antar tabel?
Diharapkan dari kandidat: Pewawancara sedang memeriksa pemahaman Anda tentang pemodelan data dan peta relasional.ping.
Contoh jawaban: Entity Framework menangani relasi menggunakan properti navigasi dan kunci asing. Framework ini mendukung relasi satu-ke-satu, satu-ke-banyak, dan banyak-ke-banyak, memungkinkan pengembang untuk menelusuri data terkait menggunakan referensi objek daripada operasi join.
4) Jelaskan situasi di mana Anda meningkatkan kinerja basis data menggunakan Entity Framework.
Diharapkan dari kandidat: Pewawancara ingin mendengar contoh praktis yang menunjukkan keterampilan optimasi.
Contoh jawaban: Dalam peran saya sebelumnya, saya meningkatkan kinerja dengan mengurangi eager loading yang tidak perlu dan menerapkan kueri proyeksi dengan pernyataan Select. Hal ini meminimalkan jumlah data yang diambil dari basis data dan secara signifikan mengurangi waktu eksekusi kueri.
5) Bagaimana Anda mengelola migrasi di Entity Framework?
Diharapkan dari kandidat: Pewawancara sedang menilai pengalaman Anda terkait perubahan skema dan kontrol versi.
Contoh jawaban: Migrasi dikelola menggunakan alat migrasi bawaan yang tracModel k berubah seiring waktu. Di posisi sebelumnya, saya secara rutin membuat dan meninjau skrip migrasi sebelum menerapkannya untuk memastikan integritas basis data di berbagai lingkungan.
6) Apa itu lazy loading, dan kapan Anda sebaiknya menghindari penggunaannya?
Diharapkan dari kandidat: Pewawancara ingin menguji pemahaman Anda tentang strategi pemuatan data dan pertimbangan kinerja.
Contoh jawaban: Lazy loading secara otomatis memuat data terkait saat diakses. Saya akan menghindari penggunaannya dalam skenario atau API yang sangat bergantung pada performa karena dapat menyebabkan banyak panggilan basis data yang tidak disengaja, yang berujung pada masalah query N+1.
7) Bagaimana Anda menangani transaksi di Entity Framework?
Diharapkan dari kandidat: Pewawancara sedang mengevaluasi pengetahuan Anda tentang konsistensi data dan penanganan kesalahan.
Contoh jawaban: Entity Framework mendukung transaksi melalui DbContext dan TransactionScope. Di pekerjaan saya sebelumnya, saya menggunakan transaksi eksplisit untuk memastikan bahwa beberapa operasi basis data terkait dapat diselesaikan dengan sukses secara bersamaan atau dibatalkan (rollback) jika terjadi kegagalan.
8) Jelaskan bagaimana dependency injection digunakan dengan Entity Framework.
Diharapkan dari kandidat: Pewawancara ingin melihat seberapa baik Anda memahami arsitektur aplikasi modern.
Contoh jawaban: Injeksi dependensi digunakan untuk menyuntikkan DbContext ke dalam layanan atau pengontrol. Hal ini meningkatkan kemampuan pengujian dan pemeliharaan dengan memungkinkan konteks untuk di-mock atau diganti tanpa mengubah logika bisnis.
9) Jelaskan bug menantang yang Anda temui dengan Entity Framework dan bagaimana Anda menyelesaikannya.
Diharapkan dari kandidat: Pewawancara mencari kemampuan memecahkan masalah dan keterampilan debugging.
Contoh jawaban: Dalam peran saya sebelumnya, saya menghadapi masalah dengan tracTerjadi konflik saat memperbarui entitas yang terlepas. Saya menyelesaikannya dengan secara eksplisit mengatur status entitas dan memastikan bahwa hanya satu instance dari setiap entitas yang ada. tracditentukan oleh konteksnya.
10) Bagaimana Anda memutuskan kapan Entity Framework bukan alat yang tepat?
Diharapkan dari kandidat: Pewawancara ingin memahami penilaian dan kemampuan Anda dalam memilih teknologi yang tepat.
Contoh jawaban: Saya mempertimbangkan alternatif ketika aplikasi memerlukan akses data berkinerja sangat tinggi atau logika stored procedure yang kompleks. Dalam kasus seperti itu, menggunakan micro-ORM atau ADO.NET murni dapat memberikan kontrol dan efisiensi yang lebih baik.
