50 parimat Entity Frameworki intervjuuküsimust ja vastust (2026)

Entity Frameworki intervjuu parimad küsimused ja vastused

Entity Frameworki intervjuuks valmistumine tähendab küsimuste ettenägemist, mis paljastavad kandidaadi tegeliku võimekuse. Entity Frameworki intervjuuküsimused näitavad mõtlemist, teadlikkust tulemuslikkusest ja seda, kuidas kandidaadid kontseptsioone praktikas rakendavad.

Entity Frameworki valdamine avab töökohti kaasaegses arenduses, alates andmepõhistest platvormidest kuni pilveteenusteni. Praktiline kogemus arendab analüüsivõimet, tugevdab tehnilist sügavust ja toetab meeskondi. Töölevõtmise juhid hindavad praktilist probleemide lahendamist, skaleeritavat disaini, nooremate üliõpilaste juhendamist ja värskete lõpetajate kasvuteid.
Loe rohkem…

👉 Tasuta PDF-i allalaadimine: Entity Frameworki intervjuuküsimused ja vastused

Entity Frameworki intervjuu parimad küsimused ja vastused

1) Mis on Entity Framework ja miks seda kasutatakse?

Entiteetide raamistik (EF) on Microsoft'i ORM (objekt-relatsioonkaart)ping) .NET-i raamistik, mis lihtsustab andmebaasidega suhtlemist, võimaldades arendajatel töötada andmetega tugevalt tüübitud .NET-objektidena toore SQL-i asemelSee kõhulihastraction võimaldab arendajatel teostada CRUD-toiminguid (Create, Read, Update, Delete), kasutades tuttavaid C# konstruktsioone, ning raamistik teisendab need toimingud optimeeritud SQL-päringuteks. EF vähendab mallipõhist andmetele juurdepääsu koodi, parandab hooldatavust ja aitab tagada kompileerimise ajal tüübiohutust.

Näiteks SQL-i kirjutamise asemel võite kasutada järgmist:

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

EF tõlgib selle LINQ päringu SQL-iks, käivitab selle andmebaasis ja tagastab tulemused objektidena.


2) Selgitage erinevust Code Esiteks, andmebaas kõigepealt ja mudel kõigepealt lähenemisviisid.

Entity Framework toetab kolme peamist arendusmeetodit:

Lähenemine Millal kasutada Mis juhtub
Code esimene Uued projektid või valdkonnapõhine disain Sina defineerid üksuste klassid. EF genereerib koodist andmebaasi skeemi.
Andmebaas First Olemasolev andmebaas EF genereerib olemasolevast skeemist üksuste klassid ja konteksti.
Model First Kui eelistate visuaalset disaini Sa kujundad mudeli visuaalses disaineris (Entity Designer) ja EF genereerib nii klassid kui ka andmebaasi.

Iga lähenemisviis sobib erinevatele stsenaariumidele: Code esimene on populaarne agiilses arenduses, Andmebaas First on eelistatud pärandandmebaaside puhul ja Model First sobib olukordadesse, kus visuaalne modelleerimine on oluline.


3) Mis on DbContext ja milline roll sellel EF-is on?

DbContext on peamine klass, mis haldab seanss andmebaasiga, tracks üksuse muudatusi ja koordineerib andmete salvestamist tagasi andmebaasi. See kujutab endast silda teie C# rakenduse ja andmebaasi vahel. Läbi DbContext, sina defineerid DbSet<TEntity> omadused, mis esindavad üksuste kogusid ja on seotud andmebaasi tabelitega.

Näide:

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

Siin Products toimib CRUD-operatsioonide teostamise kogumina. EF kasutab seda konteksti track objekti olekut ja genereerige SQL-käske SaveChanges().


4) Mis on migratsioonid Entity Frameworkis ja kuidas neid kasutatakse?

Migratsioonid on mehhanism track ja rakenda skeemi muudatused andmebaasi aja jooksul. Mudeli arenedes aitavad migratsioonid andmebaasi sünkroonis hoida ilma SQL-skripte käsitsi muutmata. Code Esiteks kasutate selliseid käske nagu:

Add-Migration InitialCreate
Update-Database

See genereerib migratsiooniklassid, mis määratlevad skeemi muudatused ja rakendavad neid andmebaasile. Migratsioonid võimaldavad andmebaasi skeemi versioonikontrolli ja hõlbustavad koostööd arenduses.


5) Kirjeldage laisat laadimist, innukat laadimist ja otsest laadimist.

Seotud andmete tõhus laadimine on EF-is kriitilise tähtsusega. Siin on võrdlus:

Strateegia Kui see töötab Tüüpiline kasutamine
Lazy Laadimine Seotud andmed laaditakse esimesel juurdepääsul Kasutage juhul, kui seotud andmeid ei pruugi alati vaja minna.
Innukas laadimine Seotud andmed laaditi ette läbi .Include() Kasutage siis, kui teate, et vajate seotud andmeid.
Selgesõnaline laadimine Laaditud käsitsi pärast päringut Annab täpse kontrolli selle üle, millal seotud andmed laaditakse.

Näiteks:

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

Laikne laadimine aitab küll esialgseid päringuid vähendada, aga võib põhjustada N+1 päringuprobleemid kui seda ettevaatlikult ei kasutata.


6) Mis on muutus? trackuningas Entity Frameworkis?

Muutma trackuningas on EF-i sisemine mehhanism jälgige üksuse oleku muutusi pärast päringu täitmist. Kui üksus otsitakse välja DbContext, see on tracked. Kõik selle omaduste muudatused märgitakse üles ja kui SaveChanges() kutsutakse, EF genereerib sobiva SQL-i INSERT, UPDATEvõi DELETE avaldused. Kirjutuskaitstud stsenaariumide puhul, kus trackuningas on ebavajalik, AsNoTracking() parandab jõudlust muudatuste keelamise teel trackuningas.


7) Kuidas Entity Framework samaaegsuse konflikte käsitleb?

Samaaegsuse kontroll tagab, et mitu kasutajat, kes samu andmeid värskendavad, ei kirjuta tahtmatult üksteise muudatusi üle. EF kasutab optimistlik samaaegsus vaikimisi. Levinud lähenemisviis hõlmab a-i lisamist samaaegsuse tunnus (nagu RowVersion ajatempel). EF kontrollib seda märki ajal SaveChanges()ja kui see erineb andmebaasi versioonist, siis a DbUpdateConcurrencyException visatakse, mis viitab konfliktile. Arendajad saavad seejärel selle erandi käsitleda, et uuesti proovida või andmete erinevusi lahendada.


8) Millised on EF-i navigeerimisomadused?

Navigeerimisomadused määratlevad üksustevahelised seosed. Need võimaldavad EF-il seoste navigeerimine (nt üks-mitmele) ilma käsitsi ühendamiseta:

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

Siin Customer on navigeerimisomadus, mis lingib Order sellega seotud CustomerEF kasutab neid omadusi päringute ajal automaatselt seoste ja ühenduste loomiseks. Navigeerimisomadused toimivad koos võõrad võtmed suhete eeskujuks seadmiseks.


9) Mis on AsNo eesmärk?Tracking()?

AsNoTracking() keelab muutmise tracpäringu kuningas, mis on kasulik ainult lugemiseks toimingud, mille puhul te ei kavatse hangitud üksusi värskendada. See parandab jõudlust, vähendades mälukasutust ja tracsuur lisakoormus. See on eriti kasulik suurte andmekogumite toomisel ilma neid muutmata.


10) Mis on kompileeritud päringud ja millal peaks neid kasutama?

Kompileeritud päringud on jõudluse optimeerimise tehnika. LINQ-päringu täitmisel teisendab EF selle tavaliselt iga kord SQL-iks. Kompileeritud päringute puhul tehakse see teisendus üks kord ja saadud delegaati kasutatakse uuesti – see vähendab sageli täidetavate või keerukate päringute üldkulu. Kasutage neid tiheda liiklusega stsenaariumid, kus sama päring töötab korduvalt erinevate parameetritega.


11) Mis on üksuse olekud Entity Frameworkis ja kuidas need mõjutavad SaveChanges() funktsiooni?

Olemi raamistik tracks iga üksuse riik et määrata, millist andmebaasi toimingut ajal teha SaveChanges()Peamised üksuste olekud on:

riik Kirjeldus Operatsioon käivitatud
Lisatud Lisatav uus üksus INSERT
Uuendatud Olemasolev üksus on uuendatud UPDATE
Kustutatud Üksus märgitud eemaldamiseks DELETE
Muutmata Muutusi ei tuvastatud mitte ükski
eraldunud Ei trackonteksti järgi mitte ükski

Kui helistate SaveChanges(), EF kontrollib üksuse olekuid ja käivitab vastavad SQL-käsud. Näiteks uus üksus lisatakse DbSet märgitakse Lisatud, mille tulemuseks on INSERT päring.

Näide:

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

See värskendab selgesõnaliselt üksuse andmebaasikirjet.

Riikide mõistmine tagab parema kontrolli andmete sünkroniseerimise ja jõudluse üle.


12) Millised on Entity Frameworki kasutamise eelised ja puudused?

Entity Framework pakub tugevaid eeliseid, aga ka mõningaid kompromisse, olenevalt teie kasutusjuhtumist.

Eelised Puudused
Lihtsustab andmetele juurdepääsu LINQ ja objektimudelite kaudu. Jõudluse üldkulud võrreldes toore ADO.NET-iga.
Vähendab standardset SQL-koodi. Keerulised päringud võivad genereerida ebaefektiivset SQL-i.
Toetab mitut andmebaasi pakkujat. Genereeritud SQL-lauseid on raskem siluda.
Tugevalt tüübitud, parandades kompileerimisaegset ohutust. Suurtes meeskondades on võimalikud migratsioonikonfliktid.
Võimaldab kiiret prototüüpimistping koos Code Esimene. Less kontroll peenhäälestatud päringute üle.

Suuremahuliste süsteemide puhul, mis nõuavad maksimaalset jõudlust, võivad arendajad siiski kombineerida toores SQL EF-iga optimeerimiseks.


13) Kuidas käsitleb Entity Framework seoseid (üks-ühele, üks-mitmele, mitu-mitmele)?

Entity Framework haldab suhteid läbi navigeerimisomadused ja välisvõtme seosed.

Suhete tüübid on:

Suhetüüp Kirjeldus Näide
Üks ühele Igal üksuse eksemplaril on üks seotud üksus. UserUserProfile
Üks-mitmele Üks üksus on seotud mitme teisega. CustomerOrders
Paljud-mitmele Mitmed üksused on omavahel seotud. StudentCourse

Näide a Üks-mitmele suhe:

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

EF genereerib automaatselt võõrvõtmed ja käepidemed kaskaadkustutuse reeglid sõltuvalt konfiguratsioonist.

Vous pouvez aussi kasutamine Sujuv API selgema suhtekaardi jaoksping.


14) Mis vahe on LINQ to Entities ja LINQ to SQL vahel?

tunnusjoon LINQ üksustele LINQ SQL-ile
Toetatud andmebaasid Mitmekordne (SQL Server, Oracle, MySQL, Jne) Ainult SQL Server
Alusraamistik Olemi raamistik ADO.NET
MUDEL Kontseptuaalse üksuse mudel Ainult andmebaasi tabelid
kaartping Kompleksne kaartping (pärand, ühingud) Otsene tabeli kaartping
Tulevane tugi Aktiivselt toetatud Hukka

LINQ üksustele on osa Entity Frameworkist ja mitmekülgsem, samas LINQ SQL-ile on piiratud SQL Serveri ja lihtsamate kasutusjuhtudega.

Seega on LINQ to Entities soovitatav ettevõtte tasemel arenduseks.


15) Mis vahe on ObjectContextil ja DbContextil?

tunnusjoon Objekti kontekst Andmebaasi kontekst
Raamistik Varasemad EF-versioonid Lihtsustatud API EF 4.1+ versioonis
Keerukus Rohkem sõnastavat Kerge ja lihtne
jõudlus Natuke kiirem, aga keerulisem kasutada Lihtsustatud minimaalsete üldkuludega
Muutma Tracking Vajalik on käsitsi konfigureerimine Automaatne trackuningas
Eelistatud kasutus Pärandussüsteemid Kaasaegsed EF / EF Core projektid

DbContext sisemiselt mähitud ObjectContext aga pakub puhtamat ja intuitiivsemat API-t. Enamik uusimaid .NET-rakendusi peaks kasutama DbContext.


16) Selgitage üksuse elutsüklit Entity Frameworkis.

Üksuse elutsükkel kirjeldab selle oleku üleminekud loomisest püsimiseni:

  1. Loomine – Entiteet luuakse mällu (olek: eraldunud).
  2. Kinnitus – Lisatud konteksti kaudu DbSet.Add() (märkus: Lisatud).
  3. Muudatus – Automaatselt tuvastatud muudatused (märkus: Uuendatud).
  4. Püsivus - SaveChanges() kutsutud → SQL-käsud käivitatud.
  5. Kustutamine – Üksus on märgitud kui Kustutatud ja eemaldati andmebaasist.

Selle elutsükli mõistmine aitab andmeprobleeme lahendada ja EF-konteksti haldamist optimeerida.


17) Mis kasu on Fluent API-st Entity Frameworkis?

. Sujuv API pakub programmilist viisi mudeli seoste, piirangute ja kaardi konfigureerimisekspings, mida sageli kasutatakse OnModelCreating() sinu meetod DbContext.

See annab täpse kontrolli konfiguratsioonide üle, mis andmete märkused väljendada ei saa.

Näide:

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

Fluent API on eriti võimas seadistamiseks liitvõtmed, palju-mitmele seosedja kaskaadireeglid.


18) Mis on andmeannotatsioonid Entity Frameworkis?

Andmete märkused on atribuudid Rakendatakse otse mudeli klassidele või omadustele skeemi käitumise määratlemiseks. Need on lihtsamad kui Fluent API, kuid vähem paindlikud.

Näide:

public class Product
{
    [Key]
    public int ProductId { get; set; }

    [Required]
    [StringLength(50)]
    public string Name { get; set; }
}

Annotatsioonid määratlevad võtmed, stringide pikkused, kohustuslikud väljad ja seosed. Täiustatud juhtudel ühendavad arendajad tavaliselt Andmete märkused ja Sujuv API.


19) Mis vahe on tracked ja ÜROtracEF Core'is kasutatud üksused?

KASUTUSALA Kirjeldus Kasuta Case'it
Tracked Entities Jälgib DbContext muudatuste jaoks. Värskenduste vaikekäitumine.
Untracked Entities Ei jälgita; hangitud koos .AsNoTracking(). Ideaalne ainult lugemiseks mõeldud toimingute jaoks.

TracKeeritud üksused tarbivad rohkem mälu, kuid võimaldavad EF-il muudatusi automaatselt tuvastada.

Untracked-üksused täiustavad jõudlus suure lugemis- ja vähese värskendusvajadusega stsenaariumides.


20) Kuidas saab Entity Frameworkis käivitada toorpäringuid?

Entity Framework võimaldab kohandatud või jõudluskriitiliste päringute jaoks käivitada toor-SQL-i.

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

Mittepäringu käskude puhul:

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

Kasutage seda funktsiooni ettevaatlikult, et vältida SQL süstimine ja säilitada andmebaasist sõltumatu paindlikkus.


21) Mis vahe on Entity Frameworkil ja Entity Framework Core'il?

Entity Framework (EF) ja Entity Framework Core (EF Core) erinevad arhitektuuri, võimaluste ja platvormideülese toe poolest.

tunnusjoon Üksuste raamistik 6 (EF6) Olemi raamistiku tuum
Platvorm Ainult .NET Framework Platvormideülene (.NET 5/6/7)
Architektuur Põhineb ObjectContextil Kerge ja modulaarne
jõudlus Mõnes päringus aeglasem Optimeeritud päringute genereerimine
LINQ tugi Küps, aga piiratud Täiustatud tõlge ja asünkroon
Andmebaasi pakkujad SQL server, Oracle Mitmekordne (MySQL, PostgreSQL, SQLite, Jne)
FUNKTSIOONID Küps (nt laisk laadimine) Moodne (nt varjude omadused, globaalsed filtrid)

EF Core on kaasaegne, aktiivselt arendatav versioon ja soovitatav valik uute .NET-projektide jaoks tänu oma paindlikkusele ja jõudlusele.


22) Kuidas toimivad tehingud Entity Frameworkis?

Entity Frameworki tehingud tagavad andmete terviklikkus kui mitu toimingut peavad koos õnnestuma või ebaõnnestuma. Vaikimisi murrab EF SaveChanges() tehingu sees. Käsitsi juhtimiseks:

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

See tagab aatomilisuse – kui mõni käsk ebaõnnestub, tühistatakse kõik muudatused.

EF integreerub ka Süsteemitehingud hajutatud tehingute toe jaoks.


23) Selgitage TPH, TPT ja TPC pärimisstrateegiaid Entity Frameworkis.

Entity Framework toetab kolme peamist pärimiskaartiping Klasside hierarhiate modelleerimise strateegiad.

Strateegia Kirjeldus Näide Eelised Puudused
TPH (tabel hierarhia järgi) Kõik klassid jagavad ühte tabelit; diskrimineeriv veerg tähistab tüüpi. Levinud EF Core'is. Lihtsad ja kiired päringud. Laud võib muutuda suureks ja hõredaks.
TPT (tabel tüübi järgi) Igal alamklassil on oma tabel. Iga tuletatud klass kaardistub eraldi. Normaliseeritud skeem. Aeglasemad liitumised suurtes hierarhiates.
TPC (tabel betooniklassi kohta) Igal klassil on oma tabel dubleeritud veergudega. Iga üksus kaardistati eraldi. Suure jõudlusega lugemised. Andmete koondamine.

Enamik arendajaid eelistab TPH lihtsuse huvides, välja arvatud juhul, kui normaliseerimine või jõudlusvajadused nõuavad teisiti.


24) Kuidas Entity Frameworkis jõudluse häälestamist käsitleda?

Entity Frameworki jõudluse optimeerimiseks tehke järgmist.

  1. Kasutama AsNoTracking() kirjutuskaitstud päringute jaoks.
  2. Innukas koormus ainult vajalikud seotud üksused .Include().
  3. Väldi N+1 päringuid kasutades projektsioone või Select().
  4. Kasutage kompileeritud päringuid sageli tehtavate toimingute jaoks.
  5. Mitme lisamise/värskenduse partii koos AddRange() ja SaveChanges().
  6. Keela automaatse tuvastamise muudatused hulgioperatsioonide puhul: context.Configuration.AutoDetectChangesEnabled = false;
  7. Kasutage vahemällu salvestamist ja lehekülgimist suurte andmekogumite jaoks.

Hästi häälestatud EF-i implementatsioon suudab läheneda ADO.NET-i jõudlusele, säilitades samal ajal arendaja tootlikkuse.


25) Mis on Entity Framework Core'i varjeomadus?

A varjuvara eksisteerib EF-mudelis, aga mitte üksuste klassis. Seda haldab EF muutuste käigus. tracker ja salvestatakse andmebaasi.

Näide:

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

See võimaldab EF-il salvestada täiendavaid metaandmeid (nt ajatempleid, auditeerimisinfot) ilma üksuse klassi muutmata.

Varjude omadustele pääsete juurde järgmiselt:

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

Varjude omadused sobivad ideaalselt logimise või auditeerimise stsenaariumide jaoks.


26) Mis on EF Core'i väärtusmuundurid?

EF Core'i väärtusmuundurid võimaldavad omaduste väärtuste teisendamist andmebaasist lugemisel või sinna kirjutamisel.

Näiteks enumi salvestamiseks stringina:

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

See suurendab paindlikkust kohandatud andmetüüpide, näiteks enum, boolvõi DateTimeOffset.

Väärtuse muundureid kasutatakse ka krüpteerimine, tihendamine või maskeerimine tundlikest andmetest.


27) Mis on globaalsed päringufiltrid ja kuidas need töötavad?

Globaalsed päringufiltrid võimaldavad tingimusi automaatselt rakendada kõigile üksuse päringutele.

See on eriti kasulik pehmed kustutused or mitme üürilepinguga.

Näide:

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

Iga päring, mis käivitati Employee jätab automaatselt välja pehmelt kustutatud kirjed, välja arvatud juhul, kui see on selgesõnaliselt ümber kirjutatud.

Globaalsed filtrid parandavad hooldatavust ja andmete turvalisust.


28) Kuidas saab Entity Frameworki koodi ühiktestide abil testida?

EF-loogika ühiktestimiseks ilma päris andmebaasi puudutamata kasutage mälus olevad andmebaasid or pilkamine:

  • 1. variant: InMemory pakkuja
    var options = new DbContextOptionsBuilder<AppDbContext>()
        .UseInMemoryDatabase("TestDb")
        .Options;
    
  • 2. variant: näidis-DbContext
    Muigama DbSet kasutades selliseid raamatukogusid nagu Moq isoleeritud testimiseks.

Ühiktestid peaksid valideerima:

  • Päringu õigsus (LINQ kaudu)
  • Andmete järjepidevus pärast SaveChanges()
  • Repositooriumi loogika

EF Core InMemory abil testimine tagab kiiruse ja väldib sõltuvusi SQL Serverist.


29) Selgitage EF-failis olevaid hoidla ja tööühiku mustreid.

Need kaks arhitektuurimustrit aitavad abstracandmetele juurdepääs ja säilitada tehingute järjepidevus.

Muster Eesmärk Rakenduse näide
Hoidla Kapseldab iga üksuse CRUD-toimingud. IRepository<T> liidesega Add(), GetAll()Jne
Tööüksus Koordineerib tehingu piires mitut repositooriumi. SaveChanges() toimib kinnituspiirina.

Näide:

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

Need mustrid paranevad testitavus, koodi taaskasutamineja murede eraldamine suurettevõtete rakendustes.


30) Mis vahe on innuka laadimise ja projektsioonlaadimise vahel?

Aspekt Innukas laadimine Projektsiooni laadimine
Eesmärk Laadib seotud andmed ette Laadib ainult teatud väljad või atribuudid
Meetod .Include() .Select()
Näide context.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name })
jõudlus Tõmbab täisobjekte Hankib minimaalselt andmeid
Kasuta Case'it Millal töötlemiseks on vaja seotud üksusi Kui vajate spetsiifilisi kergekaalulisi andmeid

Projektsiooni laadimine on a jõudluse optimeerimine mis vähendab mälukoormust, valides ainult vajalikud veerud.


31) Mis on Entity Framework Core'i interceptorid?

EF Core'i pealtkuulajad võimaldavad arendajatel pealt kuulata ja muuta andmebaasi toiminguid, näiteks päringu täitmine, käskude loomine ja ühenduse avamine.

Need toimivad vahetarkvara komponentidena EF-i ja andmebaasi pakkuja vahel.

Näide: Kõikide täidetud SQL-käskude logimine.

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

Sa registreerid selle DbContextOptionsBuilder:

optionsBuilder.AddInterceptors(new CommandInterceptor());

Eelised:

  • Täiustatud logimine
  • Turvalisus (päringu valideerimine)
  • Auditeerimine ja tulemuslikkus trackuningas

32) Kuidas EF Core asünkroonseid operatsioone käsitleb?

Entity Framework Core toetab täielikult asünkroonne programmeerimine selliste meetodite kaudu nagu SaveChangesAsync(), ToListAsync()ja FirstOrDefaultAsync().

Asünkroonne teostus aitab parandada skaleeritavust veebirakendustes, vabastades niite I/O-ga seotud andmebaasioperatsioonide ooteajal.

Näide:

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

Asünkroonsed toimingud on eriti tõhusad suure läbilaskevõimega töötlustes. ASP.NET Core API-d ja mikroteenused, vähendades kõnede blokeerimist ja parandades reageerimisaega.


33) Mis on ühenduse vastupidavus Entity Framework Core'is?

Ühenduse vastupidavus aitab teie rakendust taastub automaatselt ajutistest andmebaasi tõrgetest, näiteks võrgukatkestused või SQL-i ajalõpud.

Seda saab konfigureerida järgmiselt:

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

Siin proovib EF ebaõnnestunud toiminguid uuesti kuni 5 korda viivitustega.

See on eriti kasulik pilvepõhised keskkonnad nagu Azure SQL, kus mööduvad vead on tavalised.


34) Millised on EF Core'is omatavate üksuste tüübid?

Omandis olevad üksused lubavad modelleerimist väärtusobjektid mis sõltuvad täielikult teise üksuse elutsüklist.

Nad jagavad sama lauda oma omanikuga ja ei saa iseseisvalt eksisteerida.

Näide:

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

Konfiguratsioon:

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

Kasutusjuhtum:

Modelleerimiskontseptsioonid nagu AADRESS, rahavõi Mõõtmine millel puudub oma identiteet.


35) Kuidas saab Entity Framework Core'is rakendada pehmeid kustutusi?

Pehmed kustutused märgivad kirjed kustutatuks, selle asemel et neid füüsiliselt eemaldada.

Neid rakendatakse, kasutades Boole'i ​​lipp ja globaalsed päringufiltrid.

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

Kustutamisoperatsioonis:

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

Plussid:

  • Ajalooliste andmete säilitamine
  • Lihtsam taastumine

Puudused:

  • Suuremad andmebaasi tabelid
  • Nõuab hoolikat filtreerimisloogikat

36) Mis on EF Core'is kompileeritud mudel ja miks seda kasutatakse?

EF Core 6+ puhul koostatud mudelid võimaldada EF-mudeli metaandmete eelkompileerimist .NET-i assembleriks, vähendades käivitusaega ja käitusaja lisakulusid.

Sammud:

  1. Käivita käsk: dotnet ef dbcontext optimize
  2. EF genereerib eelkompileeritud mudelifaili, mille rakendus käivitamisel kiiremini laadib.

Kasu: Vähendab initsialiseerimise latentsust 30–40%, eriti suurtes rakendustes, kus on palju üksusi.

Kasutusjuhtum: Suure jõudlusega mikroteenused ja serverita keskkonnad.


37) Kuidas saab Entity Frameworkis vahemällu salvestamist rakendada?

Vahemällu salvestamine aitab vähendada korduvaid andmebaasipäringuid. Sellel on kaks peamist taset:

KASUTUSALA Kirjeldus Näide
Esimese taseme vahemälu Sisseehitatud, iga DbContext Näiteks Automaatselt hallatav
Teise taseme vahemälu Väline vahemälu on kontekstide vahel jagatud Kasutage selliseid raamatukogusid nagu EFCoreSecondLevelCacheInterceptor

Teise taseme vahemällu salvestamise näide:

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

See parandab märkimisväärselt jõudlust lugemismahukad rakendused vältides andmebaasi üleliigseid tabamusi.


38) Kuidas haldab EF Core samaaegsuse tokeneid ja ajatempleid?

Samaaegsuse märgid takistavad vastuolulised värskendused mitme kasutajaga keskkondades.

Saate omaduse märkida samaaegsuse märgiks, kasutades funktsiooni [ConcurrencyCheck] or [Timestamp] atribuut.

Näide:

public class Product
{
    public int Id { get; set; }

    [Timestamp]
    public byte[] RowVersion { get; set; }
}

Värskenduse toimumise korral lisab EF selle veeru WHERE klausel.

Kui väärtus ei ühti, siis DbUpdateConcurrencyException visatakse – tagades optimistlik samaaegsuse kontroll.


39) Kuidas rakendate auditeerimist (loodud, muudetud, kustutatud)? trackuningas) EF Core'is?

Auditeerimine tracks metaandmed, näiteks kes lõi, muutis või kustutas Records.

Saate tühistada 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();
}

Liides:

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

See meetod tsentraliseerib auditiloogikat, tagades järjepidev andmehaldus.


40) Millised on Entity Frameworki kasutamise parimad tavad ettevõtterakendustes?

Kategooria Best Practice Kasu
jõudlus Kasutama AsNoTracking() ja kirjutuskaitstud päringute prognoosid. Vähendab üldkulusid.
Disain Rakenda hoidla ja tööüksuse mustreid. Parandab hooldatavust.
TURVALISUS SQL-süstimise vältimiseks kasutage parameetriga päringuid. Andmekaitse.
Skaalautuvus Kasutage ühenduste koondamist ja asünkroonseid meetodeid. Talub suurt koormust.
Migratsioonid Kasutage versioonikontrolliga automatiseeritud migratsioone. Lihtsustab skeemide haldamist.
konfiguratsioon Ühendusstringide ja saladuste eksternaliseerimine. Parem keskkonnaisolatsioon.
Testimine Kasutage ühiktestide jaoks InMemory pakkujat. Kiiremad testid.
Raie Toimivusülevaadete saamiseks luba EF-logimine. Lihtsam veaotsing.

Need tavad tagavad vastupidav, skaleeritav ja hooldatav Entity Frameworkil loodud rakendused.


41) Kuidas saab Entity Frameworkis LINQ päringuid optimeerida SQL-i teisenduse parandamiseks?

Entity Framework teisendab LINQ päringud automaatselt SQL-iks, kuid ebaefektiivsed mustrid võivad põhjustada aeglast või üleliigset SQL-i. LINQ optimeerimine tagab, et ORM genereerib toimivad andmebaasipäringud.

Optimeerimistehnikad:

Kasutage projektsioone:

  1. Valige tervete üksuste asemel ainult vajalikud veerud.
  2. var customers = context.Customers
        .Select(c => new { c.Id, c.Name })
        .ToList();
    
  3. Vältige kliendipoolset hindamist:
    Veenduge alati, et filtreerimine toimuks SQL-is, mitte mälus. EF Core hoiatab, kui hindamine on kliendipoolne.
  4. Kasutama AsNoTracking() kirjutuskaitstud andmete jaoks.
  5. var orders = context.Orders.AsNoTracking().ToList();
  6. Kasutage kompileeritud päringuid korduvate LINQ-toimingute jaoks.
  7. Vältige tarbetut .Include() kõned — lisage seotud andmed ainult vajaduse korral.

Näide:

Ebaefektiivne:

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

Efektiivne:

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

42) Millised on erinevad viisid algandmete sisestamiseks EF Core'i?

Andmete külvamine tagab, et andmebaasis on vaike- või võrdlusandmed kui see on loodud.

1. lähenemisviis: ModelBuilderi kasutamine

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

See lisab andmed automaatselt ajal, mil Update-Database.

2. lähenemisviis: kohandatud seemnemeetod

Käivitage kood käsitsi käivitamisel:

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

3. lähenemisviis: SQL-skriptid

Kasutage migreerimisel toor-SQL-i:

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

Soovitus:
Kasutama HasData() staatiliste võrdlusandmete ja dünaamiliste käivitusandmete programmilise külvamise jaoks.


43) Kuidas haldab EF Core andmebaasipakkujaid sisemiselt?

EF tuum on pakkujast sõltumatu, mis tähendab, et see saab sihtida mitut andmebaasimootorit eraldi andmebaasi pakkuja paketid.

Levinumad pakkujad:

Provider NuGet Pakend andmebaas
SQL Server Microsoft.EntityFrameworkCore.SqlServer MSSQL
SQLite Microsoft.EntityFrameworkCore.Sqlite Mobiil/lauaarvuti
PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL PostgreSQL
MySQL Pomelo.EntityFrameworkCore.MySql MySQL
Cosmose DB Microsoft.EntityFrameworkCore.Cosmos NoSQL

Sisemiselt kasutab EF Core abstrackihid jaoks:

  • Päringu tõlge
  • SQL-käskude genereerimine
  • Andmetüübi kaartping

Iga pakkuja rakendab oma klasse, mis pärivad EF Core'i baasabs-isttractsioonid (nt RelationalDatabaseProvider, QuerySqlGenerator).


44) Mis on „jagatud päring” ja millal peaks seda kasutama?

Jagatud päringud takistavad EF-i toimimist suured ja keerulised ühendused käivitades ühe asemel mitu SQL-päringut.

Näide:

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

See käivitab:

  1. Päring 1 → Hankige kliente
  2. Päring 2 → Hankige nende klientidega seotud tellimused

Eelised:

  • Hoiab ära suurte Cartesiuse korrutiste tekkimise.
  • Parandab jõudlust suurte omavahel seotud andmekogumite puhul.

Puudus:

Mitu edasi-tagasi reisi andmebaasi.

Kasutama jagatud päringud kui laaditakse innukalt suuri seotud andmeid, mis võivad põhjustada mäluprobleeme.


45) Kuidas saab EF-funktsioonide abil genereeritud SQL-käske tõhusalt jälgida?

SQL-i jälgimine aitab siluda aeglaseid päringuid ja optimeerida ORM-i käitumist.

SQL-i logimise meetodid:

  1. Konsooli logimine
  2. optionsBuilder
        .UseSqlServer(conn)
        .LogTo(Console.WriteLine, LogLevel.Information);
    
  3. ILoggerFactory integratsioon
  4. var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    optionsBuilder.UseLoggerFactory(loggerFactory);
    
  5. Püüdjad Täitma DbCommandInterceptor käskude ja ajastuste jäädvustamiseks.
  6. Profileerimisvahendid Kasutage selliseid tööriistu nagu:
    • MiniProfiler
    • SQL Server Profiler
    • EFCorePowerTools

Metsaraie peaks olema valikuliselt lubatud tootmises, et vältida jõudluse lisakulusid.


46) Mis vahe on muutusel?Tracker.DetectChanges() ja AutoDetectChangesEnabled?

tunnusjoon DetectChanges() AutoDetectChangesEnabled
KASUTUSALA Meetod vara
Eesmärk Sunnib EF-i skaneerima tractuvastab üksusi ja tuvastab muudatusi Lubab/keelab automaatse muudatuste tuvastamise
vaikimisi Käsitsi Tõsi
Kasutus Nõua otsesõnu jõudluse optimeerimist Keela massivärskenduste jaoks

Näide:

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

Tsüklites automaatse tuvastamise keelamine parandab jõudlust kuni 40% lahtiste toimingute puhul.


47) Kuidas EF Core'iga ajalisi tabeleid kasutada?

Ajutised tabelid (kasutusele võetud SQL Server 2016-s) võimaldavad teil track ajaloolised andmed automaatselt.

Sammud:

  1. Ajalise toe lubamine migreerimisel:
  2. builder.Entity<Employee>()
        .ToTable("Employees", b => b.IsTemporal());
    
  3. Päringu ajaloolised andmed:
  4. var history = context.Employees
        .TemporalAsOf(DateTime.UtcNow.AddDays(-7))
        .ToList();
    

Plussid:

  • Sisseehitatud andmeajalugu trackuningas
  • Auditeerimine ja vastavus
  • Manuaalseid päästikuid pole vaja

EF Core 6+ toetab täielikku ajalist päringut.


48) Kuidas EF Core toetab koos kompileeritud päringuid ja eelnevalt genereeritud mudeleid?

Kompileeritud päringud ja kompileeritud mudelid on kaks jõudluse funktsioonid mis teineteist täiendavad.

tunnusjoon Eesmärk
Kompileeritud päringud Vahemälu päringu tõlketulemused
Koostatud mudelid Eelkompileeri mudeli metaandmed

Kompileeritud päringu näide:

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

Kasutus:

var customer = _getCustomerById(context, 5);

Koos: Koostatud mudelid vähendavad käivituskulud, samas kui kompileeritud päringud vähendavad päringu käitusaja üldkulu — ideaalne kõrgsageduslikud päringud.


49) Millised on EF-i kasutamisel mikroteenuste arhitektuuris levinud lõksud?

Levinud vead:

  1. Jagatud andmebaasikontekst teenuste vahel
    → Rikub mikroteenuste isolatsiooni.
    → Igal mikroteenusel peaks olema oma DbContext ja skeem.
  2. Vestlev suhtlus (N+1 päringut)
    → Minimeerige EF-päringute arv API-kõne kohta.
  3. Liigne innukas laadimine
    → Laadi DTO-de kaudu ainult vajalik.
  4. Tsentraliseeritud migratsioonid
    → Iga teenus peaks oma migratsioone iseseisvalt haldama.
  5. Tehinguliste piiride puudumine
    → Kasutage hajutatud tehinguid (väljundkausta muster), kui on vaja teenusteülest järjepidevust.
  6. Tihe sidumine SQL-pakkujaga
    → Kasuta repositooriumi abstracsäilitada andmebaasi valiku paindlikkus.

50) Kuidas integreerub sõltuvuste süstimine DbContextiga ASP.NET Core'is?

Entity Framework integreerub sujuvalt ASP.NET Core'i sisseehitatud sõltuvuste süstimine (DI) süsteemi.

Setup:

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

Seejärel süstige see kontrolleritesse või teenustesse:

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

Eluajad:

Eluaegne Kirjeldus Soovitatav
Reguleerimisala Üks kontekst HTTP-päringu kohta vaikimisi
Mööduv Iga kord uus eksemplar Taustatööd
Singleton Jagatud globaalselt Väldi (mitte lõimekindel)

DI kasutamine tagab testitavus, elutsükli haldusja ressursitõhususe veebis ja taustaprotsessides.


🔍 Parimad Entity Frameworki intervjuuküsimused koos reaalsete stsenaariumide ja strateegiliste vastustega

1) Mis on Entity Framework ja miks seda ettevõtterakendustes kasutatakse?

Kandidaadilt oodatakse: Intervjueerija soovib hinnata teie põhiteadmisi Entity Frameworkist ja selle väärtusest reaalsetes rakendustes.

Näite vastus: Entiteetide raamistik on objekti-relatsioonikaartping .NET-i raamistik, mis võimaldab arendajatel andmebaasidega töötada .NET-objektide abil toore SQL-i asemel. Seda kasutatakse ettevõtterakendustes tootlikkuse parandamiseks, malliandmetele juurdepääsu koodi vähendamiseks ja murede selge lahususe säilitamiseks.


2) Kas saate selgitada erinevust ... vahel? Code Esiteks, andmebaasipõhine ja mudelipõhine lähenemine?

Kandidaadilt oodatakse: Intervjueerija soovib hinnata teie teadmisi erinevate arendusprotsesside kohta ja seda, millal neid kasutada.

Näite vastus: Code First alustab domeeniklassidega ja genereerib koodist andmebaasi. Database First alustab olemasoleva andmebaasiga ja genereerib üksuste klassid. Model First kasutab mudeli määratlemiseks visuaalset disainerit ja loob seejärel nii koodi kui ka andmebaasi. Iga lähenemisviis valitakse projekti nõuete ja olemasoleva infrastruktuuri põhjal.


3) Kuidas Entity Framework tabelite vahelisi seoseid käsitleb?

Kandidaadilt oodatakse: Intervjueerija kontrollib teie arusaamist andmemodelleerimisest ja relatsioonikaardist.ping.

Näite vastus: Entity Framework haldab seoseid navigeerimisomaduste ja võõrvõtmete abil. See toetab üks-ühele, üks-mitmele ja mitu-mitmele seoseid, võimaldades arendajatel seotud andmeid läbida objektiviidete, mitte ühenduste abil.


4) Kirjeldage olukorda, kus parandasite andmebaasi jõudlust Entity Frameworki abil.

Kandidaadilt oodatakse: Intervjueerija soovib kuulda praktilist näidet optimeerimisoskuste demonstreerimisest.

Näite vastus: Eelmises rollis parandasin jõudlust, vähendades ebavajalikku kiiret laadimist ja rakendades projektsioonipäringuid Select-lausetega. See minimeeris andmebaasist hangitavate andmete hulka ja vähendas oluliselt päringute täitmisaega.


5) Kuidas hallata migratsioone Entity Frameworkis?

Kandidaadilt oodatakse: Intervjueerija hindab teie kogemusi skeemimuudatuste ja versioonikontrolliga.

Näite vastus: Migratsioone hallatakse sisseehitatud migratsioonitööriistade abil, mis track-mudel muutub aja jooksul. Eelmisel ametikohal genereerisin ja vaatasin regulaarselt üle migratsiooniskripte enne nende rakendamist, et tagada andmebaasi terviklikkus eri keskkondades.


6) Mis on laisk laadimine ja millal te seda ei kasutaks?

Kandidaadilt oodatakse: Intervjueerija soovib testida teie arusaamist andmete laadimise strateegiatest ja tulemuslikkuse kompromissidest.

Näite vastus: Laisk laadimine laadib seotud andmed automaatselt, kui neile juurde pääsetakse. Ma väldiksin selle kasutamist jõudluskriitilistes stsenaariumides või API-des, kuna see võib põhjustada mitu tahtmatut andmebaasikõnet, mis omakorda võib viia N+1 päringu probleemini.


7) Kuidas Entity Frameworkis tehinguid käsitletakse?

Kandidaadilt oodatakse: Intervjueerija hindab teie teadmisi andmete järjepidevuse ja veakäsitluse kohta.

Näite vastus: Entity Framework toetab tehinguid DbContexti ja TransactionScope'i kaudu. Eelmisel töökohal kasutasin selgesõnalisi tehinguid, et tagada mitme seotud andmebaasitoimingu edukas lõpuleviimine koos või ebaõnnestumise korral tagasipööramine.


8) Selgitage, kuidas sõltuvusinjektsiooni kasutatakse Entity Frameworkis.

Kandidaadilt oodatakse: Intervjueerija tahab näha, kui hästi sa mõistad tänapäevast rakenduste arhitektuuri.

Näite vastus: Sõltuvuse süstimist kasutatakse DbContexti sisestamiseks teenustesse või kontrolleritesse. See parandab testitavust ja hooldatavust, võimaldades konteksti imiteerida või asendada ilma äriloogikat muutmata.


9) Kirjeldage Entity Frameworki kasutamisel esinenud keerulist viga ja kuidas te selle lahendasite.

Kandidaadilt oodatakse: Intervjueerija otsib probleemide lahendamise oskust ja veaotsingu oskust.

Näite vastus: Eelmises rollis puutusin kokku probleemiga tracEraldi üksuste värskendamisel tekivad konfliktid. Lahendasin selle, määrates selgesõnaliselt üksuste olekud ja tagades, et igast üksusest on ainult üks eksemplar. trackontekstist olenevalt.


10) Kuidas otsustada, millal Entity Framework ei ole õige tööriist?

Kandidaadilt oodatakse: Intervjueerija soovib mõista teie otsustusvõimet ja võimet valida sobivaid tehnoloogiaid.

Näite vastus: Kaalun alternatiive, kui rakendused vajavad äärmiselt suure jõudlusega andmepääsu või keerukat salvestatud protseduuride loogikat. Sellistel juhtudel võib mikro-ORM-i või toore ADO.NET-i kasutamine pakkuda suuremat kontrolli ja tõhusust.

Võta see postitus kokku järgmiselt: