Top 50 Entity Framework-interviewvragen en -antwoorden (2026)

Topvragen en -antwoorden voor sollicitatiegesprekken over Entity Framework

Een goede voorbereiding op een Entity Framework-interview betekent dat je moet anticiperen op de vragen die je werkelijke vaardigheden aan het licht brengen. Interviewvragen over Entity Framework onthullen denkprocessen, prestatiebewustzijn en hoe kandidaten concepten in de praktijk brengen.

Het beheersen van Entity Framework opent deuren naar diverse functies binnen moderne softwareontwikkeling, van datagedreven platforms tot cloudservices. Praktische ervaring vergroot het analytisch vermogen, versterkt de technische kennis en ondersteunt teams. Leidinggevenden hechten waarde aan praktische probleemoplossing, schaalbaar ontwerp, het begeleiden van junioren en groeimogelijkheden voor pas afgestudeerden.
Lees meer ...

👉 Gratis PDF-download: Interviewvragen en -antwoorden over Entity Framework

Topvragen en -antwoorden voor sollicitatiegesprekken over Entity Framework

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

Entiteitskader (EF) is Microsoft's ORM (Object-Relational Mapping) framework voor .NET dat Vereenvoudigt de interactie met de database doordat ontwikkelaars met gegevens kunnen werken als sterk getypeerde .NET-objecten in plaats van ruwe SQL.Deze buikspierentracEF stelt ontwikkelaars in staat om CRUD-bewerkingen (Create, Read, Update, Delete) uit te voeren met behulp van vertrouwde C#-constructies, en het framework vertaalt deze bewerkingen op de achtergrond naar geoptimaliseerde SQL-query's. EF vermindert overbodige code voor gegevenstoegang, verbetert de onderhoudbaarheid en helpt bij het afdwingen van typeveiligheid 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 Code Eerst de database-eerst-benadering en vervolgens de model-eerst-benadering.

Entity Framework ondersteunt drie belangrijke ontwikkelingsmethoden:

Aanpak Wanneer te gebruiken Wat gebeurt er
Code Voornaam* Nieuwe projecten of domein-gedreven ontwerp Je definieert entiteitsklassen. EF genereert het databaseschema vanuit de code.
Database Eerst Bestaande database EF genereert entiteitsklassen en context op basis van een bestaand schema.
Eerst modelleren Als je de voorkeur geeft aan visueel ontwerp Je ontwerpt het model in een visuele ontwerper (Entity Designer), en EF genereert zowel de klassen als de database.

Elke aanpak is geschikt voor verschillende scenario's: Code Voornaam* is populair in agile-ontwikkeling. Database Eerst heeft de voorkeur bij oudere databases, en Eerst modelleren 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 het beheer voert sessie met de database, tracks-entiteitswijzigingen en coördineert het opslaan van gegevens terug naar de database. Het vormt een brug tussen uw C#-applicatie en de database. DbContext, jij definieert DbSet<TEntity> Eigenschappen, die verzamelingen van entiteiten vertegenwoordigen en overeenkomen met 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 track objecttoestanden en SQL-opdrachten genereren op SaveChanges().


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

Migratie zijn een mechanisme om track en solliciteer schemawijzigingen Naarmate uw model evolueert, helpen migraties de database gesynchroniseerd te houden zonder dat u handmatig SQL-scripts hoeft aan te passen. Code Ten eerste gebruik je commando's zoals:

Add-Migration InitialCreate
Update-Database

Dit genereert migratieklassen die schemawijzigingen definiëren en deze toepassen op de database. Migraties maken versiebeheer van het databaseschema mogelijk en bevorderen samenwerking bij de ontwikkeling.


5) Beschrijf lazy loading, eager loading en expliciete loading.

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

Strategie Wanneer het draait Typisch gebruik
Lazy laden Gerelateerde gegevens worden geladen bij de eerste toegang. Gebruik deze optie wanneer gerelateerde gegevens niet altijd nodig zijn.
Gretig laden Gerelateerde gegevens worden vooraf geladen via .Include() Gebruik deze functie wanneer u weet dat u gerelateerde gegevens nodig hebt.
Expliciet laden Handmatig geladen na query Biedt controle over het exacte moment waarop gerelateerde gegevens worden geladen.

Bijvoorbeeld:

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

Lazy loading helpt het aantal initiële query's te verminderen, maar kan leiden tot N+1 queryproblemen als het niet zorgvuldig wordt gebruikt.


6) Wat is verandering? tracKoning in Entity Framework?

Veranderen tracKing is het interne mechanisme van EF om statuswijzigingen van entiteiten monitoren na het uitvoeren van een query. Wanneer een entiteit wordt opgehaald door DbContext, het is tracked. Eventuele wijzigingen in de eigenschappen worden vermeld, en wanneer SaveChanges() Als de functie wordt aangeroepen, genereert EF de bijbehorende SQL. INSERT, UPDATEof DELETE verklaringen. Voor alleen-lezen scenario's waar trackoning is overbodig, AsNoTracking() verbetert de prestaties door wijzigingen uit te schakelen trackoning.


7) Hoe gaat Entity Framework om met conflicten tussen gelijktijdige processen?

Gelijktijdigheidscontrole zorgt ervoor dat meerdere gebruikers die dezelfde gegevens bijwerken, elkaars wijzigingen niet onbedoeld overschrijven. EF maakt gebruik van optimistische gelijktijdigheid standaard. Een veelgebruikte aanpak is het toevoegen van een gelijktijdigheidstoken (zoals een RowVersion tijdstempel). EF controleert dit token tijdens SaveChanges()en als deze afwijkt van de databaseversie, een DbUpdateConcurrencyException Deze uitzondering wordt gegenereerd, wat wijst op een conflict. Ontwikkelaars kunnen deze uitzondering vervolgens afhandelen om de poging te herhalen of de verschillen in gegevens op te lossen.


8) Wat zijn navigatie-eigenschappen in EF?

Navigatie-eigenschappen definiëren relaties tussen entiteiten. Ze stellen EF in staat om navigeren door verenigingen (bijvoorbeeld een één-op-veel-relatie) zonder handmatige koppelingen:

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

Hier Customer is een navigatie-eigenschap die een koppeling legt Order met betrekking tot zijn verwante CustomerEF gebruikt deze eigenschappen om automatisch relaties en joins tot stand te brengen tijdens query's. Navigatie-eigenschappen werken hiermee samen. buitenlandse sleutels om relaties te modelleren.


9) Wat is het doel van AsNo?Tracking()?

AsNoTracking() schakelt wijziging uit trackoning voor een vraag, 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 tracHet is vooral handig bij het ophalen van grote datasets zonder deze te wijzigen.


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

Gecompileerde query's zijn een techniek voor prestatieoptimalisatie. Wanneer een LINQ-query wordt uitgevoerd, vertaalt EF deze doorgaans elke keer naar SQL. Bij gecompileerde query's wordt deze vertaling eenmalig uitgevoerd en wordt de resulterende delegate hergebruikt, waardoor de overhead voor veelvuldig uitgevoerde of complexe query's wordt verminderd. Gebruik ze in veel verkeer scenario's waarbij dezelfde query herhaaldelijk wordt uitgevoerd met verschillende parameters.


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

Entiteitskader tracks van elke entiteit staat om te bepalen welke databasebewerking moet worden uitgevoerd tijdens SaveChanges()De belangrijkste entiteitsstatussen zijn:

Land Beschrijving Operatie geactiveerd
Toegevoegd Nieuwe entiteit in te voegen INSERT
Gewijzigd Bestaande entiteit bijgewerkt UPDATE
Verwijderde Entiteit gemarkeerd voor verwijdering DELETE
onveranderd Geen wijzigingen gedetecteerd Geen
Vrijstaand Niet tracked door context Geen

Wanneer je belt SaveChanges()EF inspecteert de status van de entiteit en voert de bijbehorende SQL-opdrachten uit. Bijvoorbeeld, een nieuwe entiteit die aan een lijst wordt toegevoegd, wordt verwerkt. DbSet zal worden gemarkeerd Toegevoegd, resulterend in een INSERT vraag.

Voorbeeld:

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

Dit werkt de databasegegevens voor de entiteit expliciet bij.

Staten begrijpen Dit zorgt voor betere controle over de gegevenssynchronisatie en de prestaties.


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

Entity Framework biedt grote voordelen, maar kent ook enkele nadelen, afhankelijk van uw specifieke toepassing.

Voordelen Nadelen
Vereenvoudigt gegevenstoegang via LINQ en objectmodellen. Prestatieverlies in vergelijking met pure ADO.NET.
Vermindert de hoeveelheid standaard SQL-code. Complexe query's kunnen inefficiënte SQL-query's genereren.
Ondersteunt meerdere databaseproviders. Het is lastiger om gegenereerde SQL-instructies te debuggen.
Sterk getypeerd, wat de veiligheid tijdens het compileren verbetert. Mogelijke conflicten bij migratie binnen grote teams.
Maakt snelle prototypeontwikkeling mogelijk.ping with Code Eerste. Less controle over nauwkeurig afgestemde zoekopdrachten.

Voor grootschalige systemen die maximale prestaties vereisen, kunnen ontwikkelaars nog steeds een mix van verschillende benaderingen gebruiken. ruwe SQL met EF voor optimalisatie.


13) Hoe behandelt Entity Framework relaties (één-op-één, één-op-veel, veel-op-veel)?

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

De verschillende soorten relaties zijn:

Relatietype Beschrijving Voorbeeld
Een op een Elke entiteitsinstantie heeft één gerelateerde entiteit. User ↔ UserProfile
Een te veel Eén entiteit staat in relatie tot meerdere andere. Customer → Orders
Veel te veel Meerdere entiteiten staan ​​met elkaar in verband. Student ↔ Course

Voorbeeld van een Een te veel relatie:

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

EF genereert automatisch foreign keys en handlers. cascade verwijderingsregels afhankelijk van de configuratie.

U kunt ook gebruik maken van Vloeiende API voor een explicietere relatiekaartping.


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

Kenmerk LINQ naar entiteiten LINQ naar SQL
Ondersteunde databases Meerdere (SQL Server, Oracle, MySQLEnz.). Alleen SQL Server
Onderliggend raamwerk Entiteitskader ADO.NET
Model Conceptueel entiteitsmodel Alleen databasetabellen
Wereldmapping Complexe kaartping (erfelijkheid, associaties) Directe tabelkaartping
Toekomstige ondersteuning Actief ondersteund Verouderd

LINQ naar entiteiten maakt deel uit van Entity Framework en is veelzijdiger, terwijl LINQ naar SQL is beperkt tot SQL Server en eenvoudigere gebruiksscenario's.

Daarom wordt LINQ to Entities aanbevolen voor ontwikkeling op bedrijfsniveau.


15) Wat is het verschil tussen ObjectContext en DbContext?

Kenmerk ObjectContext DbContext
Kader Eerdere EF-versies Vereenvoudigde API in EF 4.1+
Ingewikkeldheid Meer uitgebreid Lichtgewicht en gemakkelijk
Prestaties Iets sneller, maar lastiger in gebruik. Vereenvoudigd met minimale overheadkosten
Veranderen Tracking Handmatige configuratie vereist Automatisch trackoning
Voorkeursgebruik Legacy-systemen Moderne EF / EF Core-projecten

DbContext omhult intern ObjectContext maar biedt een schonere en intuïtievere API. De meeste huidige .NET-applicaties zouden dit moeten gebruiken. DbContext.


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

De levenscyclus van een entiteit beschrijft de aard ervan. toestandsovergangen van schepping tot voortbestaan:

  1. Creatie – De entiteit wordt in het geheugen geïnstantieerd (status: Vrijstaand).
  2. Gehechtheid – Toegevoegd aan de context via DbSet.Add() (staat: Toegevoegd).
  3. Wijziging – Wijzigingen automatisch gedetecteerd (status: Gewijzigd).
  4. Volharding - SaveChanges() aangeroepen → SQL-opdrachten uitgevoerd.
  5. Recht op verwijdering – Entiteit gemarkeerd als Verwijderde en verwijderd uit de database.

Inzicht in deze levenscyclus helpt bij het opsporen van datafouten en het optimaliseren van het EF-contextbeheer.


17) Waarvoor wordt Fluent API gebruikt in Entity Framework?

De Vloeiende API Biedt een programmatische manier om modelrelaties, beperkingen en kaarten te configureren.pings, vaak gebruikt in de OnModelCreating() methode van uw DbContext.

Het biedt nauwkeurige controle over configuraties die gegevens annotaties kan het niet uitdrukken.

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 relatiesen cascade-regels.


18) Wat zijn data-annotaties in Entity Framework?

Gegevensannotaties zijn attributen Deze worden rechtstreeks toegepast op modelklassen of -eigenschappen om het gedrag van het schema te definiëren. Ze zijn eenvoudiger dan de 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 complexere gevallen combineren ontwikkelaars deze elementen meestal. Gegevensannotaties en Vloeiende API.


19) Wat is het verschil tussen tracgeked en niettracked-entiteiten in EF Core?

Type Beschrijving Use Case
Tracked Entiteiten Gecontroleerd door DbContext voor veranderingen. Standaardgedrag voor updates.
Untracked Entiteiten Niet gemonitord; opgehaald met .AsNoTracking(). Ideaal voor alleen-lezen bewerkingen.

Tracked-entiteiten verbruiken meer geheugen, maar stellen EF in staat om wijzigingen automatisch te detecteren.

Untracked-entiteiten verbeteren prestatie in scenario's met veel leesbeurten en weinig updates.


20) Hoe kun je onbewerkte SQL-query's uitvoeren in Entity Framework?

Entity Framework maakt het mogelijk om onbewerkte SQL uit te voeren voor aangepaste of prestatiekritieke query's.

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

Voor opdrachten die geen query's zijn:

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

Gebruik deze functie met de nodige voorzichtigheid om te voorkomen dat... SQL injectie en de flexibiliteit behouden die onafhankelijk is van de gebruikte database.


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

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

Kenmerk Entity Framework 6 (EF6) Entiteit Framework Kern
Platform Alleen .NET Framework Platformonafhankelijk (.NET 5/6/7)
Architectuur Gebaseerd op ObjectContext Lichtgewicht en modulair
Prestaties Bij sommige zoekopdrachten is de reactiesnelheid lager. Geoptimaliseerde querygeneratie
LINQ-ondersteuning Volwassen maar beperkt Verbeterde vertaling en asynchrone verwerking
Databaseproviders SQL-server, Oracle Meervoudige (MySQL, PostgreSQL, SQLiteEnz.).
Kenmerken Volwassen (bijv. lazy loading) Modern (bijv. schaduweigenschappen, globale filters)

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


22) Hoe werken transacties in Entity Framework?

Transacties in Entity Framework zorgen ervoor dat... data-integriteit wanneer meerdere bewerkingen tegelijkertijd moeten slagen of mislukken. Standaard wikkelt EF dit in. 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 garandeert atomiciteit: als een commando mislukt, worden alle wijzigingen teruggedraaid.

EF integreert ook met Systeem.Transacties voor ondersteuning van gedistribueerde transacties.


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

Entity Framework ondersteunt drie belangrijke overervingskaarten.ping Strategieën voor het modelleren van klassehiërarchieën.

Strategie Beschrijving Voorbeeld Voordelen Nadelen
TPH (Tabel per hiërarchie) Alle klassen delen één tabel; een discriminator-kolom identificeert het type. Komt veel voor in EF Core. Eenvoudige, snelle zoekopdrachten. De tabel kan groot en onoverzichtelijk worden.
TPT (tabel per type) Elke subklasse heeft zijn eigen tabel. Elke afgeleide klasse wordt afzonderlijk in kaart gebracht. Genormaliseerd schema. Bij grote hiërarchieën verlopen de joins trager.
TPC (Tabel per betonklasse) Elke klasse heeft zijn eigen tabel met dubbele kolommen. Elke entiteit wordt afzonderlijk in kaart gebracht. Hoogwaardige leesresultaten. Gegevensredundantie.

De meeste ontwikkelaars geven de voorkeur aan TPH vanwege de eenvoud, tenzij normalisatie- of prestatievereisten anders voorschrijven.


24) Hoe ga je om met prestatieoptimalisatie in Entity Framework?

Om de prestaties van Entity Framework te optimaliseren:

  1. Gebruik AsNoTracking() voor alleen-lezen query's.
  2. Agretige belasting alleen noodzakelijke gerelateerde entiteiten met .Include().
  3. Vermijd N+1-query's met behulp van projecties of Select().
  4. Gebruik gecompileerde query's voor veelvuldig uitgevoerde bewerkingen.
  5. Meerdere invoegingen/updates tegelijk uitvoeren with AddRange() en SaveChanges().
  6. Schakel AutoDetectChanges uit voor bulkbewerkingen: context.Configuration.AutoDetectChangesEnabled = false;
  7. Gebruik caching en paginering. voor grote datasets.

Een goed afgestelde EF-implementatie kan de prestaties van ADO.NET benaderen, terwijl de productiviteit van ontwikkelaars behouden blijft.


25) Wat is een schaduweigenschap in Entity Framework Core?

A schaduweigenschap Het bestaat wel in het EF-model, maar niet in de entiteitsklasse. Het wordt door EF beheerd tijdens de wijziging. tracker en opgeslagen in de database.

Voorbeeld:

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

Hierdoor kan EF extra metadata (bijv. tijdstempels, auditinformatie) opslaan zonder de entiteitsklasse aan te passen.

Je kunt schaduweigenschappen openen via:

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

Schaduweigenschappen zijn ideaal voor logboekregistratie of auditdoeleinden.


26) Wat zijn waardeomzetters in EF Core?

Waardeomzetters in EF Core maken het mogelijk om eigenschapswaarden te transformeren bij het lezen van of schrijven naar de database.

Om bijvoorbeeld een enum als een tekenreeks op te slaan:

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

Dit verhoogt de flexibiliteit voor aangepaste gegevenstypen zoals enum, boolof DateTimeOffset.

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


27) Wat zijn globale queryfilters en hoe werken ze?

Globale queryfilters maken het mogelijk om automatisch voorwaarden toe te passen op alle query's voor een entiteit.

Dit is vooral handig voor: zachte verwijderingen or multi-tenancy.

Voorbeeld:

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

Elke query uitgevoerd tegen Employee Worden automatisch soft-deleted records uitgesloten, tenzij dit expliciet wordt overschreven.

Globale filters verbeteren het onderhoud en de gegevensbeveiliging.


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

Om EF-logica te testen zonder een echte database te benaderen, kunt u het volgende gebruiken: databases in het geheugen or spotachtig:

  • Optie 1: In-memory provider
    var options = new DbContextOptionsBuilder<AppDbContext>()
        .UseInMemoryDatabase("TestDb")
        .Options;
    
  • Optie 2: Mock DbContext
    Bespotten DbSet het gebruik van bibliotheken zoals MOQ voor geïsoleerde tests.

Unit tests moeten het volgende valideren:

  • Correctheid van de query (via LINQ)
  • Gegevensconsistentie na SaveChanges()
  • Repositorylogica

Testen met EF Core InMemory garandeert snelheid en voorkomt afhankelijkheid van SQL Server.


29) Leg de patronen van de repository en de unit of work in EF uit.

Deze twee architectonische patronen helpen abstract gegevenstoegang en Zorg voor consistentie in transacties..

Patronen Doel Implementatie Voorbeeld
bewaarplaats Omvat CRUD-bewerkingen voor elke entiteit. IRepository<T> interface met Add(), GetAll(), Etc.
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 testbaarheid, code hergebruiken scheiding van zorgen in grootschalige bedrijfsapplicaties.


30) Wat is het verschil tussen eager loading en projection loading?

Aspect Gretig laden Projectie laden
Doel Laadt gerelateerde gegevens vooraf. Laadt alleen specifieke velden of eigenschappen.
Methode .Include() .Select()
Voorbeeld context.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name })
Prestaties Haalt volledige objecten op Haalt minimale gegevens op
Use Case Wanneer gerelateerde entiteiten nodig zijn voor de verwerking Wanneer u specifieke, lichtgewicht gegevens nodig hebt

Projectielading is een prestatie-optimalisatie Dat vermindert de geheugenbelasting door alleen de noodzakelijke kolommen te selecteren.


31) Wat zijn interceptors in Entity Framework Core?

In EF Core stellen interceptors ontwikkelaars in staat om databasebewerkingen te onderscheppen en te wijzigen, zoals: query-uitvoering, commando-creatie en het openen van verbindingen.

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

Voorbeeld: Alle uitgevoerde SQL-opdrachten worden gelogd.

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 (queryvalidatie)
  • Audit en prestaties trackoning

32) Hoe behandelt EF Core asynchrone bewerkingen?

Enty Framework Core biedt volledige ondersteuning. asynchrone programmering door middel van methoden zoals SaveChangesAsync(), ToListAsync()en FirstOrDefaultAsync().

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

Voorbeeld:

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

Asynchrone bewerkingen zijn bijzonder effectief bij hoge doorvoersnelheden. ASP.NET Core API's en microservices, waardoor blokkerende aanroepen worden verminderd en de responstijden worden verbeterd.


33) Wat is verbindingsveerkracht in Entity Framework Core?

Verbindingsbestendigheid helpt 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)
);

In dit geval zal EF mislukte bewerkingen tot 5 keer opnieuw proberen, met een vertraging.

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


34) Wat zijn 'owned entity types' in EF Core?

Eigendomsentiteiten maken modellering mogelijk waardeobjecten die volledig afhankelijk zijn van de levenscyclus van een andere entiteit.

Ze delen dezelfde tafel als hun eigenaar en kunnen niet onafhankelijk van elkaar 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);

Use case:

Het modelleren van concepten zoals Adres, Geldof maat die geen eigen identiteit hebben.


35) Hoe implementeer je soft deletes in Entity Framework Core?

Bij soft deletes worden records als verwijderd gemarkeerd in plaats van fysiek verwijderd.

Ze worden geïmplementeerd met behulp van een booleaanse vlag en globale zoekfilters.

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

Bij de verwijderingsbewerking:

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

Voordelen:

  • Bewaring van historische gegevens
  • Gemakkelijker herstel

Nadelen:

  • Grotere databasetabellen
  • Vereist zorgvuldige filterlogica.

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

In EF Core 6+, gecompileerde modellen Hiermee kan de EF-modelmetadata vooraf worden gecompileerd tot een .NET-assembly, wat de opstarttijd en de overhead tijdens de uitvoering vermindert.

Stappen:

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

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

Use case: Hoogwaardige microservices en serverloze omgevingen.


37) Hoe kun je caching implementeren in Entity Framework?

Caching helpt het aantal herhaalde databasequery's te verminderen. Er zijn twee hoofdniveaus:

Type Beschrijving Voorbeeld
Eerste cache Ingebouwd, per DbContext instantie Automatisch beheerd
Cache op het tweede niveau Externe cache die gedeeld wordt tussen contexten Gebruik bibliotheken zoals EFCoreSecondLevelCacheInterceptor

Voorbeeld van caching op het tweede niveau:

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

Dit verbetert de prestaties aanzienlijk in toepassingen die veel leeswerk vereisen door overbodige databaseaanvragen te vermijden.


38) Hoe beheert EF Core gelijktijdigheidstokens en tijdstempels?

Gelijktijdigheidstokens voorkomen tegenstrijdige updates in omgevingen met meerdere gebruikers.

Je kunt een eigenschap als een gelijktijdigheidstoken markeren met behulp van de [ConcurrencyCheck] or [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, een DbUpdateConcurrencyException wordt gegooid — waardoor optimistische gelijktijdigheidscontrole.


39) Hoe implementeert u auditing (aangemaakt, gewijzigd, verwijderd)? trackoning) in EF Core?

Auditing tracks-metadata zoals die heeft aangemaakt, gewijzigd of verwijderd Records.

Je kunt overschrijven 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; }
}

Deze methode centraliseert de auditlogica, waardoor de volgende zaken worden gewaarborgd: consistente gegevensbeheer.


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

Categorie Best Practice Voordeel
Prestaties Gebruik AsNoTracking() en projecties voor alleen-lezen query's. Verlaagt de overheadkosten.
Design Implementeer de Repository- en Unit of Work-patronen. Verbetert het onderhoud.
Security Gebruik geparameteriseerde query's om SQL-injectie te voorkomen. Gegevensbescherming.
Schaalbaarheid Gebruik connection pooling en asynchrone methoden. Kan hoge belastingen aan.
Migratie Gebruik geautomatiseerde migraties met versiebeheer. Vereenvoudigt het schema-beheer.
Configuratie Externaliseer verbindingsreeksen en geheimen. Betere omgevingsisolatie.
Testen Gebruik de InMemory-provider voor unit-tests. Snellere testruns.
Logging Schakel EF-logging in voor prestatie-inzichten. Debuggen wordt eenvoudiger.

Deze werkwijzen zorgen ervoor dat robuust, schaalbaar en onderhoudbaar Applicaties gebouwd met Entity 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 leiden tot trage of redundante SQL-code. Door LINQ te optimaliseren, zorgt u ervoor dat de ORM performante databasequery's genereert.

Optimalisatie technieken:

Gebruik projecties:

  1. Selecteer alleen de benodigde kolommen in plaats van volledige entiteiten.
  2. var customers = context.Customers
        .Select(c => new { c.Id, c.Name })
        .ToList();
    
  3. Vermijd evaluatie aan de klantzijde:
    Zorg er altijd voor dat er gefilterd wordt. bij SQL, niet in het geheugen. EF Core waarschuwt wanneer de evaluatie aan de clientzijde plaatsvindt.
  4. Gebruik AsNoTracking() voor alleen-lezen gegevens.
  5. var orders = context.Orders.AsNoTracking().ToList();
  6. Gebruik maken van samengestelde query's voor herhaalde LINQ-bewerkingen.
  7. Vermijd onnodig .Include() gesprekken — Voeg alleen relevante gegevens toe wanneer 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 laden?

Data-seeding zorgt ervoor dat de database de juiste gegevens bevat. standaard- of referentiegegevens toen het werd aangemaakt.

Aanpak 1: ModelBuilder gebruiken

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

Dit voegt automatisch gegevens in 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 in migraties:

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

Aanbeveling:
Gebruik HasData() voor statische referentiegegevens en programmatische seeding voor dynamische opstartgegevens.


43) Hoe beheert EF Core intern databaseproviders?

EF Core is provider-onafhankelijkDit betekent dat het zich via afzonderlijke kanalen op meerdere database-engines kan richten. databaseproviderpakketten.

Veelvoorkomende aanbieders:

leverancier NuGet Pakket Database
SQL Server Microsoft.EntityFrameworkCore.SqlServer MSSQL
SQLite Microsoft.EntityFrameworkCore.Sqlite Mobiel/Desktop
PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL PostgreSQL
MySQL Pomelo.EntityFrameworkCore.MySql MySQL
Kosmos DB Microsoft.EntityFrameworkCore.Cosmos NoSQL

Internally gebruikt EF Core abstractie lagen voor:

  • Zoekvertaling
  • SQL-opdrachtgeneratie
  • Gegevenstypekaartping

Elke provider implementeert zijn eigen klassen die overerven van de basisklassen van EF Core.tracties (bijv. RelationalDatabaseProvider, QuerySqlGenerator).


44) Wat is een 'split query' en wanneer moet je die gebruiken?

Gesplitste query's voorkomen dat EF de uitvoering ervan belemmert. grote, complexe verbindingen 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 het volgende uit:

  1. Query 1 → Klanten werven
  2. Query 2 → Bestellingen ophalen die gerelateerd zijn aan die klanten

Voordelen:

  • Voorkomt grote Cartesiaanse producten.
  • Verbetert de prestaties bij grote, gerelateerde datasets.

Nadeel:

Meerdere retourzendingen naar de database.

Gebruik split queries Bij het eager laden van grote, gerelateerde gegevens kan dit geheugenproblemen veroorzaken.


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

Het monitoren van SQL helpt bij het opsporen van problemen met trage query's en het optimaliseren van het ORM-gedrag.

Methoden om SQL te loggen:

  1. Console-logboekregistratie
  2. optionsBuilder
        .UseSqlServer(conn)
        .LogTo(Console.WriteLine, LogLevel.Information);
    
  3. ILoggerFactory-integratie
  4. var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    optionsBuilder.UseLoggerFactory(loggerFactory);
    
  5. Onderscheppers Implementeren DbCommandInterceptor om commando's en timing vast te leggen.
  6. Profileringshulpmiddelen Gebruik hulpmiddelen zoals:
    • MiniProfiler
    • SQL Server-profiler
    • EFCorePowerTools

Het loggen moet selectief ingeschakeld in de productie om prestatieverlies te voorkomen.


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

Kenmerk DetectChanges() AutoDetectChangesEnabled
Type Methode Eigendom
Doel Dwingt EF tot scannen tracgekoppelde entiteiten en detecteer wijzigingen Schakelt automatische wijzigingsdetectie in/uit.
Standaard Handleiding Waar
Gebruik Vraag expliciet om prestatieoptimalisatie. Uitschakelen voor bulkupdates

Voorbeeld:

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

Het uitschakelen van automatische detectie in lussen verbetert de prestaties met maximaal 40% bij bulkoperaties.


47) Hoe gebruik je tijdelijke tabellen met EF Core?

Temporele tabellen (geïntroduceerd in SQL Server 2016) stellen u in staat om track historische gegevens automatisch.

Stappen:

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

Voordelen:

  • Ingebouwde gegevenshistorie trackoning
  • Controle en naleving
  • Geen handmatige triggers nodig

EF Core 6+ ondersteunt volledige temporele querying.


48) Hoe ondersteunt EF Core gecompileerde query's en vooraf gegenereerde modellen samen?

Gecompileerde query's en gecompileerde modellen zijn twee prestatiekenmerken die elkaar aanvullen.

Kenmerk Doel
Samengestelde query's Cache de resultaten van de queryvertaling
Gecompileerde modellen Vooraf compileren van modelmetadata

Voorbeeld van een gecompileerde query:

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: Gecompileerde modellen verminderen opstart kostenterwijl gecompileerde query's de prestaties verminderen overheadkosten van runtime-query's — ideaal voor veelvoorkomende zoekopdrachten.


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

Veelgemaakte fouten:

  1. Gedeelde DbContext over verschillende services
    → Schendt de isolatie van microservices.
    → Elke microservice moet zijn eigen DbContext en schema hebben.
  2. Spraakzame communicatie (N+1 vragen)
    → Minimaliseer het aantal EF-query's per API-aanroep.
  3. Overmatig enthousiast 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. Sterke koppeling met SQL-provider
    → Gebruik repository abstracom flexibiliteit te behouden bij de keuze van de database.

50) Hoe integreert dependency injection met DbContext in ASP.NET Core?

Entity Framework integreert naadloos met De ingebouwde Dependency Injection (DI) van ASP.NET Core systeem.

Setup:

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

Injecteer het vervolgens in controllers of services:

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

Levensduren:

Levensduur Beschrijving Aanbevolen voor
Bereik Eén context per HTTP-verzoek Standaard
vergankelijk Elke keer een nieuwe instantie Achtergrond banen
eenling Wereldwijd gedeeld Vermijden (niet draadveilig)

Het gebruik van DI zorgt ervoor dat testbaarheid, levenscyclusbeheeren efficiënt gebruik van hulpbronnen over web- en achtergrondprocessen heen.


🔍 Topvragen voor sollicitatiegesprekken over het Entity Framework met praktijkvoorbeelden en strategische antwoorden

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

Verwacht van kandidaat: De interviewer wil uw basiskennis van Entity Framework en de waarde ervan in praktijktoepassingen beoordelen.

Voorbeeld antwoord: Entity Framework is een object-relationele kaart.ping Een framework voor .NET waarmee ontwikkelaars met databases kunnen werken met behulp van .NET-objecten in plaats van pure SQL. Het wordt gebruikt in bedrijfsapplicaties om de productiviteit te verbeteren, repetitieve code voor gegevenstoegang te verminderen en een sterke scheiding van verantwoordelijkheden te behouden.


2) Kunt u het verschil uitleggen tussen Code Eerst de database-eerst-benadering, en eerst het model-eerst-benadering?

Verwacht van kandidaat: De interviewer wil uw kennis van verschillende ontwikkelworkflows en uw inzicht in wanneer u welke workflow moet gebruiken, toetsen.

Voorbeeld antwoord: Code De eerste methode begint met domeinklassen en genereert de database vanuit code. De tweede methode begint met een bestaande database en genereert entiteitsklassen. De derde methode gebruikt een visuele ontwerper om het model te definiëren en creëert vervolgens zowel de code als de database. Elke aanpak wordt gekozen op basis van de projectvereisten en de bestaande infrastructuur.


3) Hoe gaat Entity Framework om met relaties tussen tabellen?

Verwacht van kandidaat: De interviewer test uw begrip van datamodellering en relationele kaarten.ping.

Voorbeeld antwoord: Entity Framework beheert relaties met behulp van navigatie-eigenschappen en foreign keys. Het ondersteunt één-op-één-, één-op-veel- en veel-op-veel-relaties, waardoor ontwikkelaars gerelateerde gegevens kunnen doorlopen met behulp van objectreferenties in plaats van joins.


4) Beschrijf een situatie waarin u de databaseprestaties hebt verbeterd met behulp van Entity Framework.

Verwacht van kandidaat: De interviewer wil een praktisch voorbeeld horen dat optimalisatievaardigheden illustreert.

Voorbeeld antwoord: In mijn vorige functie heb ik de prestaties verbeterd door onnodige eager loading te verminderen en projectiequeries met SELECT-statements te implementeren. Hierdoor werd de hoeveelheid data die uit de database werd opgehaald geminimaliseerd en de uitvoeringstijd van de query's aanzienlijk verkort.


5) Hoe beheer je migraties in Entity Framework?

Verwacht van kandidaat: De interviewer beoordeelt uw ervaring met schemawijzigingen en versiebeheer.

Voorbeeld antwoord: Migraties worden beheerd met behulp van de ingebouwde migratietools die tracHet k-model verandert in de loop van de tijd. In mijn vorige functie genereerde en controleerde ik regelmatig migratiescripts voordat ik ze toepaste, om de database-integriteit in alle omgevingen te waarborgen.


6) Wat is lazy loading en wanneer zou je het gebruik ervan vermijden?

Verwacht van kandidaat: De interviewer wil uw begrip van data-laadstrategieën en de afwegingen tussen prestaties testen.

Voorbeeld antwoord: Lazy loading laadt automatisch de relevante gegevens wanneer deze worden opgevraagd. Ik zou het gebruik ervan vermijden in prestatiekritieke scenario's of API's, omdat het kan leiden tot meerdere onbedoelde databaseaanroepen, wat het N+1-queryprobleem tot gevolg kan hebben.


7) Hoe ga je om met transacties in Entity Framework?

Verwacht van kandidaat: De interviewer beoordeelt uw kennis van gegevensconsistentie en foutafhandeling.

Voorbeeld antwoord: Entity Framework ondersteunt transacties via de DbContext en TransactionScope. Bij mijn vorige werkgever gebruikte ik expliciete transacties om ervoor te zorgen dat meerdere gerelateerde databasebewerkingen ofwel succesvol tegelijk werden voltooid, ofwel werden teruggedraaid in geval van een fout.


8) Leg uit hoe dependency injection wordt gebruikt met Entity Framework.

Verwacht van kandidaat: De interviewer wil zien hoe goed je moderne applicatiearchitectuur begrijpt.

Voorbeeld antwoord: Dependency injection wordt gebruikt om de DbContext in services of controllers te injecteren. Dit verbetert de testbaarheid en het onderhoud, omdat de context kan worden gemockt of vervangen zonder de bedrijfslogica te wijzigen.


9) Beschrijf een lastige bug die je bent tegengekomen in Entity Framework en hoe je die hebt opgelost.

Verwacht van kandidaat: De interviewer is op zoek naar probleemoplossend vermogen en vaardigheden op het gebied van foutopsporing.

Voorbeeld antwoord: In mijn vorige functie stuitte ik op een probleem met tracEr treden conflicten op bij het bijwerken van losgekoppelde entiteiten. Ik heb dit opgelost door de status van de entiteiten expliciet in te stellen en ervoor te zorgen dat er slechts één instantie van elke entiteit aanwezig is. tracked door de context.


10) Hoe bepaal je wanneer Entity Framework niet het juiste hulpmiddel is?

Verwacht van kandidaat: De interviewer wil inzicht krijgen in uw beoordelingsvermogen en uw vermogen om de juiste technologieën te kiezen.

Voorbeeld antwoord: Ik overweeg alternatieven wanneer applicaties extreem snelle gegevenstoegang of complexe opgeslagen procedures vereisen. In dergelijke gevallen kan het gebruik van een micro-ORM of pure ADO.NET meer controle en efficiëntie bieden.

Vat dit bericht samen met: