| 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:
- Pencatatan log yang ditingkatkan
- Keamanan (validasi kueri)
- Audit dan pelacakan kinerja
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:
- Pelestarian data historis
- Pemulihan lebih mudah
Kekurangan:
- Tabel database yang lebih besar
- Membutuhkan logika pemfilteran yang cermat
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:
- Jalankan perintah:
dotnet ef dbcontext optimize
- 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:
- 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:
- Terjemahan kueri
- Pembuatan perintah SQL
- Pemetaan tipe data
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:
- Kueri 1 → Dapatkan Pelanggan
- Kueri 2 → Dapatkan Pesanan yang terkait dengan pelanggan tersebut
Manfaat:
- Mencegah produk Cartesian berukuran besar.
- Meningkatkan kinerja dengan kumpulan data terkait yang besar.
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:
- 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: - Profil Mini
- Profil SQL Server
- EFCorePowerTools
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:
- 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:
- Pelacakan riwayat data bawaan
- Audit dan kepatuhan
- Tidak diperlukan pemicu manual
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:
- DbContext Bersama di Seluruh Layanan
→ Melanggar isolasi layanan mikro.
→ Setiap layanan mikro harus memiliki DbContext dan skemanya sendiri.
- Komunikasi Cerewet (Kueri N+1)
→ Minimalkan kueri EF per panggilan API.
- Pemuatan Bersemangat Berlebihan
→ Muat hanya yang diperlukan melalui DTO.
- Centralized Migrations
→ Each service should manage its own migrations independently.
- Lack of Transactional Boundaries
→ Use distributed transactions (Outbox pattern) if cross-service consistency is required.
- 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.
-
OMAX Abrasive Waterjet Cutting:Tambahan Ideal untuk Setiap Toko Mesin
Mesin pemotong waterjet abrasif dari masa lalu memiliki tekanan air yang lebih rendah dan diturunkan untuk memotong hanya bahan lunak. Dengan munculnya aliran jet bertekanan tinggi baru yang lebih sempit dan lebih kuat, mesin pemotong jet air abrasif seperti OMAX telah mendapatkan reputasi sebagai m
-
Mesin CNC Untuk Keramik
Sebagai bahan yang banyak digunakan dalam barang sehari-hari mulai dari jam, pisau, batu bata, hingga tembikar, pemesinan keramik dapat menjadi cara yang bagus untuk memperluas portofolio bahan perusahaan. Meskipun mereka secara tradisional dibuat menggunakan kiln, mesin mereka bisa menjadi usaha ya
-
Selimut Listrik
Latar Belakang Selimut listrik adalah penutup tempat tidur dengan elemen pemanas built-in sehingga orang yang tidur dapat mempertahankan suhu yang diinginkan bahkan di ruangan yang dingin. Banyak konsumen lebih memilih selimut listrik karena penggunaannya dapat mengurangi biaya pemanas rumah. Kont
-
Apa itu Reamer:Jenis, Nomenklatur, dan Aplikasinya
Dalam artikel ini, Anda akan mempelajari apa itu Reamer? 9 Jenis Reamer yang Berbeda dengan gambar, nomenklaturnya, dan aplikasinya. Apa itu Reamer Alat untuk membesarkan lubang (reamer) adalah alat yang digunakan untuk memperluas atau menyelesaikan lubang yang telah dibor, dibor, atau diberi inti