Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> C Taal

Master Enty Framework:50 belangrijke interviewvragen en antwoorden (2026)

Voorbereiden op een Enty Framework-interview betekent anticiperen op de vragen die echte capaciteiten aan het licht brengen. Entiteitsframework-interviewvragen onthullen denkwijzen, prestatiebewustzijn en hoe kandidaten concepten in de praktijk vertalen.

Mastering Entity Framework opent rollen binnen de moderne ontwikkeling, van datagestuurde platforms tot cloudservices. Praktische blootstelling vergroot het analytisch vermogen, versterkt de technische diepgang en ondersteunt teams. Leidinggevenden hechten waarde aan praktische probleemoplossing, schaalbaar ontwerp, begeleiding van junioren en groeipaden voor pas afgestudeerden.

Lees meer…

👉 Gratis pdf-download:vragen en antwoorden over het Entity Framework-interview

1) Wat is Entity Framework en waarom wordt het gebruikt?

Entity Framework (EF) is het ORM-framework (Object-Relational Mapping) van Microsoft voor .NET dat database-interactie vereenvoudigt door ontwikkelaars in staat te stellen met gegevens te werken als sterk getypeerde .NET-objecten in plaats van onbewerkte SQL . Deze abstractie stelt ontwikkelaars in staat CRUD-bewerkingen (Create, Read, Update, Delete) uit te voeren met behulp van bekende C#-constructies, en het raamwerk zorgt voor de vertaling van deze bewerkingen in geoptimaliseerde SQL-query's onder de motorkap. EF vermindert de standaardcode voor gegevenstoegang, verbetert de onderhoudbaarheid en helpt bij het afdwingen van de veiligheid tijdens het compileren.

In plaats van SQL te schrijven, kunt u bijvoorbeeld het volgende gebruiken:

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

EF vertaalt deze LINQ-query naar SQL, voert deze uit op de database en retourneert de resultaten als objecten.

2) Leg het verschil uit tussen de benaderingen Code First, Database First en Model First.

Enty Framework ondersteunt drie belangrijke ontwikkelingsbenaderingen:

Aanpak Wanneer gebruiken Wat er gebeurt Eerst coderen Nieuwe projecten of domeingestuurd ontwerpJe definieert entiteitsklassen. EF genereert het databaseschema op basis van code.Database First Bestaande databaseEF genereert entiteitsklassen en context op basis van een bestaand schema.Model eerst Wanneer u de voorkeur geeft aan visueel ontwerpU ontwerpt het model in een visuele ontwerper (Entity Designer), en EF genereert zowel de klassen als de database.

Elke aanpak dient verschillende scenario's:Code First is populair in agile ontwikkeling, Database First heeft de voorkeur bij oudere databases en Model First geschikt voor gevallen waarin visuele modellering belangrijk is.

3) Wat is DbContext en welke rol speelt het in EF?

DbContext is de primaire klasse die de sessie met de database beheert , houdt entiteitswijzigingen bij en coördineert het opslaan van gegevens in de database. Het vertegenwoordigt een brug tussen uw C#-applicatie en de database. Via DbContext , definieer jij DbSet<TEntity> eigenschappen, die verzamelingen entiteiten vertegenwoordigen en toewijzen aan tabellen in de database.

Voorbeeld:

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

Hier Products fungeert als een verzameling voor het uitvoeren van CRUD-bewerkingen. EF gebruikt deze context om objectstatussen te volgen en genereer SQL-opdrachten op SaveChanges() .

4) Wat zijn migraties in Entity Framework en hoe worden ze gebruikt?

Migraties zijn een mechanisme om schemawijzigingen bij te houden en toe te passen in de database in de loop van de tijd. Naarmate uw model evolueert, zorgen migraties ervoor dat de database gesynchroniseerd blijft zonder dat u SQL-scripts handmatig hoeft aan te passen. Met Code First gebruik je opdrachten als:

Add-Migration InitialCreate
Update-Database

Hierdoor worden migratieklassen gegenereerd die schemawijzigingen definiëren en deze op de database toepassen. Migraties maken versiebeheer voor het databaseschema mogelijk en vergemakkelijken gezamenlijke ontwikkeling.

5) Beschrijf Lazy Loading, Eager Loading en Explicit Loading.

Het efficiënt laden van gerelateerde gegevens is van cruciaal belang in EF. Hier is een vergelijking:

Strategie Wanneer het actief is Typisch gebruik Lazy Loading Gerelateerde gegevens geladen bij eerste toegangGebruik wanneer gerelateerde gegevens niet altijd nodig zijn.Eager laden Gerelateerde gegevens vooraf geladen via .Include() Gebruik dit als u weet dat u gerelateerde gegevens nodig heeft.Expliciet laden Handmatig geladen na zoekopdracht Geeft controle over wanneer gerelateerde gegevens precies worden geladen.

Bijvoorbeeld:

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

Lui laden helpt het aantal initiële zoekopdrachten te verminderen, maar kan N+1-queryproblemen veroorzaken als het niet zorgvuldig wordt gebruikt.

6) Wat is het bijhouden van wijzigingen in Entity Framework?

Het bijhouden van wijzigingen is het interne mechanisme van EF om veranderingen in de entiteitsstatus te monitoren nadat een query is uitgevoerd. Wanneer een entiteit wordt opgehaald door DbContext , het wordt bijgehouden. Eventuele wijzigingen in de eigenschappen worden genoteerd, en wanneer SaveChanges() wordt aangeroepen, genereert EF de juiste SQL INSERT , UPDATE , of DELETE verklaringen. Voor alleen-lezen-scenario's waarin tracking niet nodig is, AsNoTracking() verbetert de prestaties door het bijhouden van wijzigingen uit te schakelen.

7) Hoe gaat Entity Framework om met gelijktijdigheidsconflicten?

Gelijktijdigheidscontrole zorgt ervoor dat meerdere gebruikers die dezelfde gegevens bijwerken, niet onbedoeld elkaars wijzigingen overschrijven. EF gebruikt optimistische gelijktijdigheid standaard. Een gebruikelijke aanpak is het toevoegen van een concurrency-token (zoals een RowVersion tijdstempel). EF controleert dit token tijdens SaveChanges() , en als deze afwijkt van de databaseversie, een DbUpdateConcurrencyException wordt gegooid, wat wijst op een conflict. Ontwikkelaars kunnen deze uitzondering vervolgens afhandelen om het opnieuw te proberen of gegevensverschillen op te lossen.

8) Wat zijn navigatie-eigenschappen in EF?

Navigatie-eigenschappen definiëren relaties tussen entiteiten. Ze stellen EF in staat door associaties te navigeren (bijvoorbeeld één-op-veel) zonder handmatige joins:

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

Hier Customer is een navigatie-eigenschap die Order koppelt naar de bijbehorende Customer . EF gebruikt deze eigenschappen om relaties op te bouwen en voegt zich automatisch bij zoekopdrachten. Navigatie-eigenschappen werken samen met externe sleutels om relaties te modelleren.

9) Wat is het doel van AsNoTracking()?

AsNoTracking() schakelt het bijhouden van wijzigingen voor een zoekopdracht uit, wat gunstig is voor alleen-lezen bewerkingen waarbij u niet van plan bent de opgehaalde entiteiten bij te werken. Dit verbetert de prestaties door het geheugengebruik te verminderen en de overhead bij te houden. Het is vooral handig bij het ophalen van grote datasets zonder deze te wijzigen.

10) Wat zijn gecompileerde query's en wanneer moet u ze gebruiken?

Gecompileerde query's zijn een techniek voor prestatie-optimalisatie. Wanneer een LINQ-query wordt uitgevoerd, vertaalt EF deze doorgaans elke keer naar SQL. Bij gecompileerde query's wordt deze vertaling één keer uitgevoerd en wordt de resulterende delegatie opnieuw gebruikt, waardoor de overhead voor vaak uitgevoerde of complexe query's wordt verminderd. Gebruik ze in veel verkeer scenario's waarin dezelfde zoekopdracht herhaaldelijk wordt uitgevoerd met verschillende parameters.

11) Wat zijn entiteitsstatussen in Entity Framework, en hoe beïnvloeden ze SaveChanges()?

Enty Framework houdt de status van elke entiteit bij om te bepalen welke databasebewerking moet worden uitgevoerd tijdens SaveChanges() . De belangrijkste entiteitsstatussen zijn:

Status Beschrijving Bewerking geactiveerd Toegevoegd Er moet een nieuwe entiteit worden ingevoegdINSERT Gewijzigd Bestaande entiteit bijgewerktUPDATE Verwijderd Entiteit gemarkeerd voor verwijderingDELETE Ongewijzigd Geen wijzigingen gedetecteerdGeenVrijstaand Niet gevolgd door contextNone

Wanneer u SaveChanges() aanroept EF inspecteert de entiteitsstatussen en voert overeenkomstige SQL-opdrachten uit. Er is bijvoorbeeld een nieuwe entiteit toegevoegd aan een DbSet wordt gemarkeerd als Toegevoegd , resulterend in een INSERT vraag.

Voorbeeld:

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

Hiermee wordt het databaserecord voor de entiteit expliciet bijgewerkt.

States begrijpen zorgt voor een betere controle over gegevenssynchronisatie en prestaties.

12) Wat zijn de voor- en nadelen van het gebruik van Entity Framework?

Entity Framework biedt sterke voordelen, maar ook enkele nadelen, afhankelijk van uw gebruiksscenario.

Voordelen Nadelen Vereenvoudigt de toegang tot gegevens via LINQ- en objectmodellen. Prestatieoverhead in vergelijking met onbewerkte ADO.NET. Vermindert standaard SQL-code. Complexe query's kunnen inefficiënte SQL genereren. Ondersteunt meerdere databaseproviders. Moeilijker te debuggen van gegenereerde SQL-instructies. Sterk getypt, waardoor de veiligheid tijdens het compileren wordt verbeterd. Migratieconflicten in grote teams mogelijk. Maakt snelle prototyping mogelijk met Code First. Minder controle over nauwkeurig afgestemde query's.

Voor grootschalige systemen die maximale prestaties vereisen, kunnen ontwikkelaars nog steeds onbewerkte SQL met EF combineren voor optimalisatie.

13) Hoe gaat Entity Framework om met relaties (één-op-één, één-op-veel, veel-op-veel)?

Entity Framework beheert relaties via navigatie-eigenschappen en buitenlandse sleutelassociaties .

De typen relaties zijn:

Relatietype Beschrijving Voorbeeld Eén-op-één Elke entiteitsinstantie heeft één gerelateerde entiteit.UserUserProfile Een-op-veel Eén entiteit heeft betrekking op meerdere andere.CustomerOrders Veel-op-veel Meerdere entiteiten hebben betrekking op elkaar.StudentCourse

Voorbeeld van een Een-op-veel relatie:

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

EF genereert automatisch externe sleutels en verwerkt cascade-verwijderregels afhankelijk van de configuratie.

U kunt ook Fluent API gebruiken voor meer expliciete relatietoewijzing.

14) Wat is het verschil tussen LINQ to Entities en LINQ to SQL?

Functie LINQ naar entiteiten LINQ naar SQL Ondersteunde databasesMeerdere (SQL Server, Oracle, MySQL, enz.)Alleen SQL ServerOnderliggend FrameworkEntity FrameworkADO.NETModelConceptual Entity ModelAlleen databasetabellenMappingComplexe mapping (overerving, associaties)Directe tabeltoewijzingToekomstige ondersteuningActief ondersteundVerouderd

LINQ naar entiteiten is onderdeel van Entity Framework en veelzijdiger, terwijl LINQ to SQL is beperkt tot SQL Server en eenvoudiger gebruiksscenario's.

Daarom wordt LINQ to Entities aanbevolen voor ontwikkeling op ondernemingsniveau.

15) Wat is het verschil tussen ObjectContext en DbContext?

Functie ObjectContext DbContext FrameworkEerdere EF-versiesVereenvoudigde API in EF 4.1+Complexiteit UitgebreiderLichtgewicht en eenvoudigPrestatiesIets sneller maar moeilijker te gebruikenVereenvoudigd met minimale overheadHet bijhouden van wijzigingenHandmatige configuratie vereistAutomatisch bijhoudenVoorkeursgebruikOude systemenModerne EF / EF-kernprojecten

DbContext wraps ObjectContext intern maar biedt een schonere en meer intuïtieve API. De meeste huidige .NET-applicaties zouden DbContext moeten gebruiken .

16) Leg de levenscyclus van een entiteit uit in Enty Framework.

De levenscyclus van een entiteit beschrijft de staatsovergangen van creatie tot volharding:

  1. Creatie – Entiteit wordt geïnstantieerd in het geheugen (status:Ontkoppeld ).
  2. Bijlage – Toegevoegd aan context via DbSet.Add() (staat:Toegevoegd ).
  3. Wijziging – Wijzigingen worden automatisch gedetecteerd (staat:Gewijzigd ).
  4. VolhardingSaveChanges() aangeroepen → SQL-opdrachten uitgevoerd.
  5. Verwijdering – Entiteit gemarkeerd als Verwijderd en verwijderd uit de database.

Het begrijpen van deze levenscyclus helpt bij het opsporen van gegevensproblemen en het optimaliseren van EF-contextbeheer.

17) Wat is het gebruik van Fluent API in Entity Framework?

De Fluent API biedt een programmatische manier om modelrelaties, beperkingen en toewijzingen te configureren, vaak gebruikt in de OnModelCreating() methode van uw DbContext .

Het geeft fijnmazige controle over configuraties met gegevensannotaties kan niet uiten.

Voorbeeld:

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

Fluent API is bijzonder krachtig voor het configureren van samengestelde sleutels , veel-op-veel-relaties , en cascaderegels .

18) Wat zijn gegevensannotaties in Enty Framework?

Gegevensannotaties zijn kenmerken rechtstreeks toegepast op modelklassen of eigenschappen om schemagedrag te definiëren. Ze zijn eenvoudiger dan Fluent API, maar minder flexibel.

Voorbeeld:

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

Annotaties definiëren sleutels, tekenreekslengtes, verplichte velden en relaties. Voor geavanceerde gevallen combineren ontwikkelaars meestal gegevensannotaties en Vloeiende API .

19) Wat is het verschil tussen gevolgde en niet-bijgehouden entiteiten in EF Core?

Typ Beschrijving Gebruiksscenario Gevolgde entiteiten Gecontroleerd door DbContext voor wijzigingen. Standaardgedrag voor updates.Niet-bijgehouden entiteiten Niet gecontroleerd; opgehaald met .AsNoTracking() .Ideaal voor alleen-lezen-bewerkingen.

Bijgehouden entiteiten verbruiken meer geheugen, maar zorgen ervoor dat EF automatisch wijzigingen kan detecteren.

Niet-bijgehouden entiteiten verbeteren de prestaties in scenario's met veel leescijfers en weinig updates.

20) Hoe kunt u onbewerkte SQL-query's uitvoeren in Enty Framework?

Entity Framework maakt het uitvoeren van onbewerkte SQL mogelijk voor aangepaste of prestatiekritische query's.

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

Voor niet-queryopdrachten:

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

Gebruik deze functie zorgvuldig om SQL-injectie te voorkomen en database-onafhankelijke flexibiliteit behouden.

21) Wat is het verschil tussen Entity Framework en Entity Framework Core?

Entity Framework (EF) en Entity Framework Core (EF Core) verschillen qua architectuur, mogelijkheden en platformonafhankelijke ondersteuning.

Functie Entiteitsframework 6 (EF6) Entiteitsframeworkkern Alleen Platform.NET Framework Cross-platform (.NET 5/6/7) Architectuur Gebaseerd op ObjectContext Lichtgewicht en modulair Prestaties Langzamer in sommige queries Geoptimaliseerde querygeneratie LINQ-ondersteuning Volwassen maar beperkt Verbeterde vertaling en asynchrone Databaseproviders SQL Server, Oracle Meerdere (MySQL, PostgreSQL, SQLite, etc.) Functies Volwassen (bijv. lazyloading) Modern (bijv. schaduweigenschappen, globale filters)

EF Core is modern, actief ontwikkeld versie en de aanbevolen keuze voor nieuwe .NET-projecten vanwege de flexibiliteit en prestaties.

22) Hoe werken transacties in Enty Framework?

Transacties in Enty Framework garanderen gegevensintegriteit wanneer meerdere operaties samen moeten slagen of mislukken. Standaard verpakt EF SaveChanges() binnen een transactie. Voor handmatige bediening:

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();
 }
}

Dit zorgt voor atomiciteit:als een opdracht mislukt, worden alle wijzigingen teruggedraaid.

EF integreert ook met System.Transactions voor gedistribueerde transactieondersteuning.

23) Leg de TPH-, TPT- en TPC-overervingsstrategieën uit in Entity Framework.

Entity Framework ondersteunt drie belangrijke strategieën voor het in kaart brengen van overerving voor het modelleren van klassenhiërarchieën.

Strategie Beschrijving Voorbeeld Voordelen Nadelen TPH (Tabel per hiërarchie) Alle klassen delen één tafel; een discriminatorkolom identificeert het type. Gebruikelijk in EF Core. Eenvoudige, snelle zoekopdrachten. De tabel kan groot en schaars worden. TPT (Tabel per type) Elke subklasse heeft zijn eigen tabel. Elke afgeleide klasse wordt afzonderlijk toegewezen. Genormaliseerd schema. Langzamere joins op grote hiërarchieën.TPC (Table Per Concrete Class) Elke klasse heeft zijn eigen tabel met dubbele kolommen. Elke entiteit wordt afzonderlijk in kaart gebracht. Hoge leesprestaties. Gegevensredundantie.

De meeste ontwikkelaars geven de voorkeur aan TPH vanwege zijn eenvoud, tenzij normalisatie of prestatiebehoeften anders dicteren.

24) Hoe ga je om met het afstemmen van prestaties in Enty Framework?

Om de prestaties van het Enty Framework te optimaliseren:

  1. Gebruik AsNoTracking() voor alleen-lezen zoekopdrachten.
  2. Graag laden alleen noodzakelijke gerelateerde entiteiten met .Include() .
  3. Vermijd N+1 zoekopdrachten met behulp van projecties of Select() .
  4. Gebruik gecompileerde zoekopdrachten voor vaak uitgevoerde bewerkingen.
  5. Batch meerdere invoegingen/updates met AddRange() en SaveChanges() .
  6. Automatische wijzigingen detecteren uit voor bulkbewerkingen:context.Configuration.AutoDetectChangesEnabled = false;
  7. Gebruik caching en paginering voor grote datasets.

Een goed afgestemde EF-implementatie kan de prestaties van ADO.NET benaderen terwijl de productiviteit van de ontwikkelaar behouden blijft.

25) Wat is een schaduweigenschap in Entity Framework Core?

Een schaduweigenschap bestaat in het EF-model, maar niet in de entiteitsklasse. Het wordt door EF bijgehouden in de change tracker en opgeslagen in de database.

Voorbeeld:

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

Hierdoor kan EF extra metadata opslaan (bijvoorbeeld tijdstempels, auditinformatie) zonder de entiteitsklasse te wijzigen.

U krijgt toegang tot schaduweigenschappen via:

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

Schaduweigenschappen zijn ideaal voor log- of auditscenario's.

26) Wat zijn waardeconverters in EF Core?

Waardeconverters in EF Core maken transformatie van eigenschapswaarden mogelijk bij het lezen van of schrijven naar de database.

Om bijvoorbeeld een enum op te slaan als een string:

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

Dit vergroot de flexibiliteit voor aangepaste gegevenstypen zoals enum , bool , of DateTimeOffset .

Waardeconverters worden ook gebruikt voor versleuteling, compressie of maskering van gevoelige gegevens.

27) Wat zijn globale zoekfilters en hoe werken ze?

Met globale zoekopdrachtfilters kunnen voorwaarden automatisch worden toegepast op alle zoekopdrachten voor een entiteit.

Dit is vooral handig voor zachte verwijderingen of multi-tenancy .

Voorbeeld:

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

Elke query die wordt uitgevoerd tegen Employee sluit automatisch verwijderde records automatisch uit, tenzij deze expliciet worden overschreven.

Globale filters verbeteren de onderhoudbaarheid en gegevensbeveiliging.

28) Hoe kun je Entity Framework-code testen met behulp van unit-tests?

Om EF-logica te testen zonder een echte database te raken, gebruikt u in-memory databases of spotten :

  • Optie 1:InMemory-provider
    var options = new DbContextOptionsBuilder<AppDbContext>()
     .UseInMemoryDatabase("TestDb")
     .Options;
    
  • Optie 2:Mock DbContext
    Mock-up DbSet met behulp van bibliotheken zoals Moq voor geïsoleerde tests.

Eenheidstests moeten valideren:

  • Juistheid van de zoekopdracht (via LINQ)
  • Gegevensconsistentie na SaveChanges()
  • Repositorylogica

Testen met EF Core InMemory zorgt voor snelheid en vermijdt afhankelijkheid van SQL Server.

29) Leg de Repository- en Unit of Work-patronen in EF uit.

Deze twee architecturale patronen helpen abstracte gegevenstoegang en transactieconsistentie behouden .

Patroon Doel Implementatievoorbeeld Repository Bevat CRUD-bewerkingen voor elke entiteit.IRepository<T> interface met Add() , GetAll() , enz.Werkeenheid Coördineert meerdere opslagplaatsen binnen een transactie.SaveChanges() fungeert als een commit-grens.

Voorbeeld:

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

Deze patronen verbeteren de testbaarheid , hergebruik van code , en scheiding van zorgen in grote bedrijfstoepassingen.

30) Wat is het verschil tussen gretig laden en projectieladen?

Aspect Eager laden Projectie laden Doel Laadt gerelateerde gegevens vooraf Laadt alleen specifieke velden of eigenschappen Method.Include() .Select() Voorbeeldcontext.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name }) PrestatieHaalt volledige objecten opHaalt minimale gegevens opGebruik CaseWanneer gerelateerde entiteiten nodig zijn voor verwerkingWanneer u specifieke lichtgewicht gegevens nodig heeft

Het laden van projecties is een prestatie-optimalisatie dat de geheugenoverhead vermindert door alleen noodzakelijke kolommen te selecteren.

31) Wat zijn interceptors in Entity Framework Core?

Met Interceptors in EF Core kunnen ontwikkelaars databasebewerkingen onderscheppen en wijzigen, zoals het uitvoeren van query's, het maken van opdrachten en het openen van verbindingen .

Ze fungeren als middleware-componenten tussen EF en de databaseprovider.

Voorbeeld: Loggen van alle uitgevoerde SQL-opdrachten.

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);
 }
}

Je registreert het in de DbContextOptionsBuilder :

optionsBuilder.AddInterceptors(new CommandInterceptor());

Voordelen:

  • Verbeterde logboekregistratie
  • Beveiliging (validatie van zoekopdrachten)
  • Controle en prestatietracking

32) Hoe gaat EF Core om met asynchrone bewerkingen?

Entity Framework Core ondersteunt asynchrone programmering volledig via methoden zoals SaveChangesAsync() , ToListAsync() , en FirstOrDefaultAsync() .

Asynchrone uitvoering helpt de schaalbaarheid te verbeteren in webapplicaties door threads vrij te geven in afwachting van I/O-gebonden databasebewerkingen.

Voorbeeld:

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

Asynchrone bewerkingen zijn vooral effectief in ASP.NET Core API's met hoge doorvoer en microservices, waardoor het aantal geblokkeerde oproepen wordt verminderd en de responstijden worden verbeterd.

33) Wat is de veerkracht van de verbinding in Entity Framework Core?

Door de veerkracht van de verbinding kan uw applicatie automatisch herstellen van tijdelijke databasefouten , zoals netwerkonderbrekingen of SQL-time-outs.

Het kan als volgt worden geconfigureerd:

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

Hier zal EF mislukte bewerkingen tot 5 keer met vertraging opnieuw proberen.

Dit is vooral handig in in de cloud gehoste omgevingen zoals Azure SQL, waar tijdelijke fouten vaak voorkomen.

34) Wat zijn entiteitstypes in eigendom in EF Core?

Eigen entiteiten maken het modelleren van waardeobjecten mogelijk die volledig afhankelijk zijn van de levenscyclus van een andere entiteit.

Ze delen dezelfde tafel als hun eigenaar en kunnen niet zelfstandig bestaan.

Voorbeeld:

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; }
}

Configuratie:

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

Gebruiksscenario:

Modellering van concepten zoals Adres , Geld , of Meting die geen eigen identiteit hebben.

35) Hoe kun je zachte verwijderingen implementeren in Entity Framework Core?

Zachte verwijderingen markeren records als verwijderd in plaats van ze fysiek te verwijderen.

Ze worden geïmplementeerd met behulp van een Booleaanse vlag en algemene zoekfilters .

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

Tijdens de verwijderbewerking:

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

Voordelen:

  • Bewaring van historische gegevens
  • Eenvoudiger herstel

Nadelen:

  • Grotere databasetabellen
  • Vereist zorgvuldige filterlogica

36) Wat is het gecompileerde model in EF Core en waarom wordt het gebruikt?

In EF Core 6+, gecompileerde modellen maakt pre-compilatie van de metadata van het EF-model in een .NET-assembly mogelijk, waardoor de opstarttijd en runtime-overhead worden verminderd.

Stappen:

  1. Voer het commando uit:dotnet ef dbcontext optimize
  2. EF genereert een vooraf gecompileerd modelbestand dat de applicatie tijdens runtime sneller laadt.

Voordeel: Vermindert de initialisatielatentie met 30-40%, vooral in grote applicaties met veel entiteiten.

Gebruiksscenario: Hoogwaardige microservices en serverloze omgevingen.

37) Hoe kun je caching implementeren in Entity Framework?

Caching helpt repetitieve databasequery's te verminderen. Er zijn twee hoofdniveaus:

Typ Beschrijving Voorbeeld Cache op het eerste niveau Ingebouwd, volgens DbContext instanceAutomatisch beheerdCache op het tweede niveau Externe cache gedeeld tussen contextenGebruik bibliotheken zoals EFCoreSecondLevelCacheInterceptor

Voorbeeld voor caching op het tweede niveau:

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

Dit verbetert de prestaties aanzienlijk in leesintensieve applicaties door overbodige databasehits te vermijden.

38) Hoe beheert EF Core gelijktijdigheidstokens en tijdstempels?

Gelijktijdigheidstokens voorkomen conflicterende updates in omgevingen met meerdere gebruikers.

U kunt een eigenschap markeren als een gelijktijdigheidstoken met behulp van [ConcurrencyCheck] of [Timestamp] attribuut.

Voorbeeld:

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

Wanneer er een update plaatsvindt, neemt EF deze kolom op in de WHERE clausule.

Als de waarde niet overeenkomt, wordt DbUpdateConcurrencyException wordt gegenereerd, waardoor optimistische gelijktijdigheidscontrole wordt gegarandeerd .

39) Hoe implementeer je auditing (aangemaakt, aangepast, verwijderde tracking) in EF Core?

Bij de controle worden metagegevens bijgehouden, zoals wie deze heeft gemaakt, gewijzigd of verwijderd gegevens.

Je kunt SaveChanges() overschrijven :

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; }
}

Deze methode centraliseert de auditlogica en zorgt voor consistent gegevensbeheer .

40) Wat zijn de beste praktijken voor het gebruik van Entity Framework in bedrijfsapplicaties?

Categorie Beste praktijk Voordeel Prestaties Gebruik AsNoTracking() en projecties voor alleen-lezen zoekopdrachten. Vermindert overhead.Ontwerp Implementeer Repository- en Unit of Work-patronen. Verbetert de onderhoudbaarheid.Beveiliging Gebruik geparametriseerde zoekopdrachten om SQL-injectie te voorkomen. Gegevensbescherming.Schaalbaarheid Gebruik verbindingspooling en asynchrone methoden. Kan hoge belasting aan.Migraties Gebruik geautomatiseerde migraties met versiebeheer. Vereenvoudigt schemabeheer.Configuratie Externaliseer verbindingsreeksen en geheimen.Betere omgevingsisolatie.Testen Gebruik de InMemory-provider voor unit-tests. Snellere testuitvoeringen.Logboekregistratie Schakel EF-logboekregistratie in voor prestatie-inzichten. Eenvoudiger foutopsporing.

Deze praktijken garanderen robuust, schaalbaar en onderhoudbaar applicaties gebouwd op Enity Framework.

41) Hoe kunt u LINQ-query's optimaliseren voor een betere SQL-vertaling in Entity Framework?

Entity Framework converteert LINQ-query's automatisch naar SQL, maar inefficiënte patronen kunnen trage of redundante SQL produceren. Het optimaliseren van LINQ zorgt ervoor dat de ORM performante databasequery's genereert.

Optimalisatietechnieken:

Gebruik projecties:

  1. Selecteer alleen de vereiste kolommen in plaats van hele entiteiten.
var customers = context.Customers
 .Select(c => new { c.Id, c.Name })
 .ToList();
Vermijd evaluatie aan de klantzijde:
Zorg er altijd voor dat het filteren gebeurt in SQL , niet in het geheugen. EF Core waarschuwt wanneer de evaluatie aan de clientzijde plaatsvindt.Gebruik AsNoTracking() voor alleen-lezen gegevens.
var orders = context.Orders.AsNoTracking().ToList();
Maak gebruik van gecompileerde zoekopdrachten voor herhaalde LINQ-bewerkingen.Vermijd onnodige .Include() bellen — neem alleen gerelateerde gegevens op als dat nodig is.

Voorbeeld:

Inefficiënt:

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

Efficiënt:

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

42) Wat zijn de verschillende manieren om initiële gegevens in EF Core te seeden?

Gegevenszaaien zorgt ervoor dat de database standaard- of referentiegegevens bevat wanneer gemaakt.

Aanpak 1:ModelBuilder gebruiken

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

Hierdoor worden gegevens automatisch ingevoegd tijdens Update-Database .

Aanpak 2:aangepaste zaadmethode

Voer de code handmatig uit bij het opstarten:

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

Aanpak 3:SQL-scripts

Gebruik onbewerkte SQL bij migraties:

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

Aanbeveling:
Gebruik HasData() voor statische referentiegegevens en programmatisch seeden voor dynamische opstartgegevens.

43) Hoe beheert EF Core databaseproviders intern?

EF Core is provideronafhankelijk , wat betekent dat het meerdere database-engines kan targeten via afzonderlijke databaseproviderpakketten .

Algemene aanbieders:

Aanbieder NuGet-pakket Database SQL ServerMicrosoft.EntityFrameworkCore.SqlServer MSSQLSQLiteMicrosoft.EntityFrameworkCore.Sqlite Mobiel/DesktopPostgreSQLNpgsql.EntityFrameworkCore.PostgreSQL PostgreSQLMySQLPomelo.EntityFrameworkCore.MySql MySQLCosmos DBMicrosoft.EntityFrameworkCore.Cosmos GeenSQL

Intern gebruikt EF Core abstractielagen voor:

  • Queryvertaling
  • SQL-opdracht genereren
  • Gegevenstypetoewijzing

Elke provider implementeert zijn eigen klassen die overnemen van de basisabstracties van EF Core (bijvoorbeeld RelationalDatabaseProvider , QuerySqlGenerator ).

44) Wat is een “gesplitste query” en wanneer moet u deze gebruiken?

Gesplitste zoekopdrachten voorkomen dat EF grote, complexe joins uitvoert door meerdere SQL-query's uit te voeren in plaats van één.

Voorbeeld:

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

Dit voert uit:

  1. Vraag 1 → Klanten werven
  2. Query 2 → Ontvang bestellingen gerelateerd aan die klanten

Voordelen:

  • Voorkomt grote Cartesiaanse producten.
  • Verbetert de prestaties met grote gerelateerde datasets.

Nadeel:

Meerdere retourvluchten naar de database.

Gebruik gesplitste zoekopdrachten bij het gretig laden van grote gerelateerde gegevens die geheugenproblemen kunnen veroorzaken.

45) Hoe kunt u EF-gegenereerde SQL-opdrachten effectief monitoren?

Door SQL te monitoren, kunt u trage query's debuggen en het ORM-gedrag optimaliseren.

Methoden om SQL te loggen:

  1. Consoleregistratie
optionsBuilder
 .UseSqlServer(conn)
 .LogTo(Console.WriteLine, LogLevel.Information);
ILoggerFactory-integratie
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
optionsBuilder.UseLoggerFactory(loggerFactory);
Onderscheppers Implementeer DbCommandInterceptor om opdrachten en timings vast te leggen.Profilingtools Gebruik tools als:
  • MiniProfiler
  • SQL Server-profiler
  • EFCorePowerTools

Logboekregistratie moet selectief worden ingeschakeld in de productie om prestatieoverhead te voorkomen.

46) Wat is het verschil tussen ChangeTracker.DetectChanges() en AutoDetectChangesEnabled?

Functie DetectChanges() AutoDetectChangesEnabled TypeMethodPropertyPurposeDwingt EF om bijgehouden entiteiten te scannen en wijzigingen te detecterenIn-/uitschakelen van automatische wijzigingsdetectieDefaultManualTrueUsageExpliciet oproepen tot prestatie-optimalisatieUitschakelen voor bulkupdates

Voorbeeld:

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

Als u automatische detectie in lussen uitschakelt, verbetert u de prestaties met maximaal 40% bij bulkoperaties.

47) Hoe gebruik je tijdelijke tabellen met EF Core?

Met tijdelijke tabellen (geïntroduceerd in SQL Server 2016) kunt u historische gegevens bijhouden automatisch.

Stappen:

  1. Tijdelijke ondersteuning bij migratie inschakelen:
builder.Entity<Employee>()
 .ToTable("Employees", b => b.IsTemporal());
Historische gegevens opvragen:
var history = context.Employees
 .TemporalAsOf(DateTime.UtcNow.AddDays(-7))
 .ToList();

Voordelen:

  • Ingebouwde tracking van gegevensgeschiedenis
  • Controle en naleving
  • Geen handmatige triggers vereist

EF Core 6+ ondersteunt volledige tijdelijke query's.

48) Hoe ondersteunt EF Core gecompileerde zoekopdrachten en vooraf gegenereerde modellen samen?

Gecompileerde zoekopdrachten en gecompileerde modellen zijn twee prestatiekenmerken die elkaar aanvullen.

Functie Doel Gecompileerde zoekopdrachtenCachevertaalresultaten van zoekopdrachtenGecompileerde modellenPrecompileer metagegevens van modellen

Voorbeeld van een samengestelde zoekopdracht:

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

Gebruik:

var customer = _getCustomerById(context, 5);

Samen: Samengestelde modellen verlagen de opstartkosten , terwijl gecompileerde query's de runtime query-overhead verminderen — ideaal voor hoogfrequente zoekopdrachten .

49) Wat zijn veelvoorkomende valkuilen bij het gebruik van EF in microservices-architectuur?

Veel voorkomende fouten:

  1. Gedeelde DbContext tussen services
    → Schendt de isolatie van microservices.
    → Elke microservice moet zijn eigen DbContext en schema hebben.
  2. Chatty-communicatie (N+1 zoekopdrachten)
    → Minimaliseer EF-query's per API-aanroep.
  3. Overmatig gretig laden
    → Laad alleen wat nodig is via DTO's.
  4. Gecentraliseerde migraties
    → Elke service moet zijn eigen migraties onafhankelijk beheren.
  5. Gebrek aan transactionele grenzen
    → Gebruik gedistribueerde transacties (Outbox-patroon) als consistentie tussen services vereist is.
  6. Strakke koppeling met 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 Beschrijving 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.


C Taal

  1. C++-bestanden en -streams
  2. C - Vakbonden
  3. C# statisch trefwoord
  4. C - Geheugenbeheer
  5. C-structuur
  6. C - Constanten en Letters
  7. C# Toegangsmodificaties
  8. C# if, if...else, if...else if en Nested if Statement
  9. C++ variabelen, literalen en constanten
  10. C# - Indexeerprogramma's
  11. C# Gedeeltelijke klasse en gedeeltelijke methode