50 najvaĹžnijih pitanja i odgovora za intervju za Entity Framework (2026.)

Najčešća pitanja i odgovori za intervju za Entity Framework

Priprema za intervju za Entity Framework znači predviđanje pitanja koja otkrivaju stvarne sposobnosti. Pitanja za intervju za Entity Framework otkrivaju razmišljanje, svijest o učinku i kako kandidati prenose koncepte u praksu.

Savladavanje Entity Frameworka otvara radna mjesta u modernom razvoju, od platformi vođenih podacima do usluga u oblaku. Praktično iskustvo gradi analitičke sposobnosti, jača tehničku dubinu i podržava timove. Lideri u zapošljavanju cijene praktično rješavanje problema, skalabilan dizajn, mentorstvo juniorima i puteve rasta za nove diplomante.
Čitaj više…

👉 Besplatno preuzimanje PDF-a: Pitanja i odgovori za intervju za Entity Framework

Najčešća pitanja i odgovori za intervju za Entity Framework

1) Ĺ to je Entity Framework i zaĹĄto se koristi?

Entity Framework (EF) je MicrosoftORM (Objektno-relacijska mapa)ping) okvir za .NET koji pojednostavljuje interakciju s bazom podataka omogućujući programerima rad s podacima kao s .NET objektima snažnog tipa umjesto sirovog SQL-aOvaj trbušnjaktracOmogućuje programerima izvođenje CRUD (Create, Read, Update, Delete) operacija koristeći poznate C# konstrukte, a okvir se brine za prevođenje tih operacija u optimizirane SQL upite u "interface" okruženju. EF smanjuje standardni kod za pristup podacima, poboljšava održavanje i pomaže u provođenju sigurnosti tipova podataka u vrijeme kompajliranja.

Na primjer, umjesto pisanja SQL-a, moĹžete koristiti:

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

EF će prevesti ovaj LINQ upit u SQL, izvršiti ga u bazi podataka i vratiti rezultate kao objekte.


2) Objasnite razliku između Code Prvo, pristupi Baza podataka na prvom mjestu i Model na prvom mjestu.

Entity Framework podrĹžava tri glavna pristupa razvoju:

Pristup Kada koristiti Što se događa
Code Ime Novi projekti ili dizajn usmjeren na domenu Definirate klase entiteta. EF generira shemu baze podataka iz koda.
Baza podataka na prvom mjestu Postojeća baza podataka EF generira klase entiteta i kontekst iz postojeće sheme.
Model First Kada preferirate vizualni dizajn Model dizajnirate u vizualnom dizajneru (Entity Designer), a EF generira i klase i bazu podataka.

Svaki pristup služi različitim scenarijima: Code Ime popularan je u agilnom razvoju, Baza podataka na prvom mjestu je poželjniji kod starijih baza podataka i Model First odgovara slučajevima gdje je vizualno modeliranje važno.


3) Ĺ to je DbContext i koju ulogu igra u EF-u?

DbContext je primarna klasa koja upravlja sesija s bazom podataka, tracks promjene entiteta i koordinira spremanje podataka natrag u bazu podataka. Predstavlja most između vaše C# aplikacije i baze podataka. Putem DbContext, ti definiraš DbSet<TEntity> svojstva koja predstavljaju kolekcije entiteta i mapiraju se na tablice u bazi podataka.

Primjer:

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

Ovdje, Products djeluje kao kolekcija za izvođenje CRUD operacija. EF koristi ovaj kontekst za track stanja objekta i generirati SQL naredbe na SaveChanges().


4) Ĺ to su migracije u Entity Frameworku i kako se koriste?

migracija su mehanizam za track i primijeni promjene sheme u bazu podataka tijekom vremena. Kako se vaš model razvija, migracije pomažu u sinkronizaciji baze podataka bez ručnog mijenjanja SQL skripti. S Code Prvo, koristite naredbe poput:

Add-Migration InitialCreate
Update-Database

Ovo generira klase migracije koje definiraju promjene sheme i primjenjuju ih na bazu podataka. Migracije omogućuju kontrolu verzija sheme baze podataka i olakšavaju kolaborativni razvoj.


5) Opišite odgođeno učitavanje, ubrzano učitavanje i eksplicitno učitavanje.

Učinkovito učitavanje povezanih podataka ključno je u EF-u. Evo usporedbe:

Strategija Kada se pokrene Tipična upotreba
Lazy Otvaram Povezani podaci učitani pri prvom pristupu Koristiti kada povezani podaci nisu uvijek potrebni.
Nestrpljivo učitavanje Povezani podaci učitani unaprijed putem .Include() Koristite kada znate da su vam potrebni povezani podaci.
Eksplicitno učitavanje Ručno učitano nakon upita Daje kontrolu nad točnim vremenom učitavanja povezanih podataka.

Na primjer:

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

Lijeno učitavanje pomaže u smanjenju početnih upita, ali može uzrokovati N+1 problema s upitima ako se ne koristi pažljivo.


6) Ĺ to je promjena trackralj u Entity Frameworku?

Promijeniti trackralj je EF-ov unutarnji mehanizam za praćenje promjena stanja entiteta nakon što se upit izvrši. Kada entitet dohvati DbContext, to je tracked. Bilježe se sve promjene njegovih svojstava i kada SaveChanges() se poziva, EF generira odgovarajući SQL INSERT, UPDATE, ili DELETE izjave. Za scenarije samo za čitanje gdje trackralj je nepotreban, AsNoTracking() poboljšava performanse onemogućavanjem promjena trackralj.


7) Kako Entity Framework rjeĹĄava konflikte konkurentnosti?

Kontrola istodobnosti osigurava da više korisnika koji ažuriraju iste podatke nenamjerno ne prebrišu promjene jedni drugih. EF koristi optimistična konkurentnost prema zadanim postavkama. Uobičajeni pristup uključuje dodavanje token istodobnosti (kao RowVersion vremenska oznaka). EF provjerava ovaj token tijekom SaveChanges(), a ako se razlikuje od verzije baze podataka, a DbUpdateConcurrencyException se izbacuje, što ukazuje na sukob. Razvojni programeri zatim mogu obraditi ovu iznimku kako bi ponovno pokušali ili riješili razlike u podacima.


8) Ĺ to su navigacijska svojstva u EF-u?

Navigacijska svojstva definiraju odnose između entiteta. Omogućuju EF-u da navigacija asocijacijama (npr. jedan-na-više) bez ručnih spajanja:

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

Ovdje, Customer je navigacijsko svojstvo koje povezuje Order s njim povezanim CustomerEF koristi ova svojstva za izgradnju odnosa i automatsko spajanje tijekom upita. Navigacijska svojstva rade uz strani ključevi modelirati odnose.


9) Koja je svrha AsNo-aTracking()?

AsNoTracking() onemogućuje promjenu trackralj za upit, što je korisno za read-only operacije gdje ne namjeravate ažurirati dohvaćene entitete. To poboljšava performanse smanjenjem korištenja memorije i trackraljevski troškovi. Posebno je korisno pri dohvaćanju velikih skupova podataka bez njihove izmjene.


10) Ĺ to su kompilirani upiti i kada ih treba koristiti?

Kompilirani upiti su tehnika optimizacije performansi. Kada se izvrši LINQ upit, EF ga obično svaki put prevodi u SQL. Kod kompiliranih upita, ovo prevođenje se vrši jednom, a rezultirajući delegat se ponovno koristi - smanjujući opterećenje za često izvršavane ili složene upite. Koristite ih u veliki promet scenariji u kojima se isti upit ponavlja s različitim parametrima.


11) Što su stanja entiteta u Entity Frameworku i kako utječu na SaveChanges()?

Entitetski okvir tracks svakog entiteta su odrediti koju operaciju baze podataka treba izvrĹĄiti tijekom SaveChanges()Glavne entitetske drĹžave su:

DrĹžava Description OperaPokrenuto
Dodano Novi entitet koji treba umetnuti INSERT
Promijenio Postojeći entitet ažuriran UPDATE
Izbrisano Entitet označen za uklanjanje DELETE
nepromijenjen Nisu otkrivene promjene nijedan
odvojen Ne tracodređeno kontekstom nijedan

Kad nazovete SaveChanges(), EF pregledava stanja entiteta i izvršava odgovarajuće SQL naredbe. Na primjer, novi entitet dodan u DbSet bit će označeno Dodano, što rezultira INSERT upit.

Primjer:

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

Ovo eksplicitno aĹžurira zapis baze podataka za entitet.

Razumijevanje stanja osigurava bolju kontrolu nad sinkronizacijom podataka i performansama.


12) Koje su prednosti i nedostaci koriĹĄtenja Entity Frameworka?

Entity Framework pruža snažne prednosti, ali i neke nedostatke, ovisno o vašem slučaju upotrebe.

Prednosti Nedostaci
Pojednostavljuje pristup podacima putem LINQ-a i objektnih modela. TroĹĄkovi performansi u usporedbi sa sirovim ADO.NET-om.
Smanjuje standardni SQL kod. Složeni upiti mogu generirati neučinkovit SQL.
PodrĹžava viĹĄe pruĹžatelja baza podataka. TeĹže je otklanjati greĹĄke u generiranim SQL naredbama.
Strogo tipizirano, što poboljšava sigurnost tijekom kompajliranja. Mogući su sukobi migracija u velikim timovima.
Omogućuje brzu izradu prototipaping sa Code Prvo. Less kontrola nad precizno podešenim upitima.

Za velike sustave koji zahtijevaju maksimalne performanse, programeri i dalje mogu kombinirati sirovi SQL s EF-om za optimizaciju.


13) Kako Entity Framework obrađuje odnose (jedan-na-jedan, jedan-na-mnogo, više-na-mnogo)?

Entity Framework upravlja odnosima putem svojstva navigacije i asocijacije stranih ključeva.

Vrste odnosa su:

Vrsta veze Description Primjer
Jedan na jedan Svaka instanca entiteta ima jedan povezani entitet. User ↔ UserProfile
Jedan-na-mnogo Jedan entitet povezan je s više drugih. Customer → Orders
Mnogi-na-mnoge Više entiteta je međusobno povezano. Student ↔ Course

Primjer Jedan-na-mnogo odnos:

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

EF automatski generira strane ključeve i ručke pravila kaskadnog brisanja ovisno o konfiguraciji.

Vous koriĹĄtenje pouvez aussi Fluent API za eksplicitniju mapu odnosaping.


14) Koja je razlika između LINQ to Entities i LINQ to SQL?

svojstvo LINK na entitete LINQ na SQL
PodrĹžane baze podataka ViĹĄestruki (SQL Server, Oracle, MySQL, Itd.). Samo SQL Server
Temeljni okvir Entitetski okvir ADO.NET
Model Model konceptualnog entiteta Samo tablice baze podataka
Kartaping Složena kartaping (nasljeđivanje, asocijacije) Izravna karta tabliceping
Buduća podrška Aktivno podržano Zastarjela

LINK na entitete dio je Entity Frameworka i svestraniji je, dok LINQ na SQL ograničen je na SQL Server i jednostavnije slučajeve upotrebe.

Stoga se LINQ to Entities preporučuje za razvoj na razini poduzeća.


15) Koja je razlika između ObjectContext-a i DbContext-a?

svojstvo Kontekst objekta DbContext
Okvir Ranije EF verzije Pojednostavljeni API u EF 4.1+
SloĹženost OpĹĄirnije Lagano i jednostavno
Izvođenje Malo brže, ali teže za korištenje Pojednostavljeno s minimalnim troškovima
Promijeniti Tracking Potrebna je ručna konfiguracija Automatski trackralj
Preferirana upotreba Naslijeđeni sustavi Moderni EF / EF Core projekti

DbContext unutarnje omotavanje ObjectContext ali pruža čišći i intuitivniji API. Većina trenutnih .NET aplikacija trebala bi koristiti DbContext.


16) Objasnite Ĺživotni ciklus entiteta u Entity Frameworku.

Životni ciklus entiteta opisuje njegov prijelazi stanja od stvaranja do trajanja:

  1. Stvaranje – Entitet je instanciran u memoriji (stanje: odvojen).
  2. Attachment – Dodano u kontekst putem DbSet.Add() (stanje: Dodano).
  3. Modifikacija – Promjene se automatski otkrivaju (stanje: Promijenio).
  4. Upornost - SaveChanges() pozvane → izvršene SQL naredbe.
  5. brisanje – Entitet označen kao Izbrisano i uklonjeni iz baze podataka.

Razumijevanje ovog Ĺživotnog ciklusa pomaĹže u otklanjanju pogreĹĄaka u podacima i optimizaciji upravljanja EF kontekstom.


17) Čemu služi Fluent API u Entity Frameworku?

The Fluent API pruža programski način konfiguriranja odnosa modela, ograničenja i mapiranjapings, često korišten u OnModelCreating() tvoja metoda DbContext.

PruĹža preciznu kontrolu nad konfiguracijama koje anotacije podataka ne moĹže izraziti.

Primjer:

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

Fluent API je posebno moćan za konfiguriranje kompozitni ključevi, odnosi mnogi-prema-mnogoi kaskadna pravila.


18) Ĺ to su anotacije podataka u Entity Frameworku?

Anotacije podataka su atributi primjenjuju se izravno na klase ili svojstva modela za definiranje ponaĹĄanja sheme. Jednostavniji su od Fluent API-ja, ali manje fleksibilni.

Primjer:

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

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

Anotacije definiraju ključeve, duljine nizova, obavezna polja i odnose. Za napredne slučajeve, programeri obično kombiniraju Bilješke podataka i Fluent API.


19) Koja je razlika između tracked i untracked entiteti u EF Coreu?

Tip Description Koristite slučaj
Tracked entiteti Nadgledano od strane DbContext za promjene. Zadano ponaĹĄanje za aĹžuriranja.
Untracked entiteti Nije praćeno; preuzeto s .AsNoTracking(). Idealno za operacije samo za čitanje.

TracKed entiteti troše više memorije, ali omogućuju EF-u da automatski otkrije promjene.

Untracked entiteti poboljšavaju predstava u scenarijima s visokim stupnjem čitanja i niskim stupnjem ažuriranja.


20) Kako moĹžete izvrĹĄavati sirove SQL upite u Entity Frameworku?

Entity Framework omogućuje izvršavanje sirovog SQL-a za prilagođene ili upite kritične za performanse.

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

Za naredbe koje nisu upiti:

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

Pažljivo koristite ovu značajku kako biste izbjegli SQL injekcija i održavati fleksibilnost neovisnu o bazi podataka.


21) Koja je razlika između Entity Frameworka i Entity Framework Corea?

Entity Framework (EF) i Entity Framework Core (EF Core) razlikuju se po arhitekturi, mogućnostima i podršci za više platformi.

svojstvo Entity Framework 6 (EF6) Entity Framework Core
Platforma Samo .NET Framework ViĹĄeplatformski (.NET 5/6/7)
Architektura Na temelju ObjektnogKonteksta Lagan i modularan
Izvođenje Sporije u nekim upitima Optimizirano generiranje upita
LINQ podrška Zrelo, ali ograničeno Poboljšani prijevod i asinkronost
PruĹžatelji baza podataka SQL posluĹžitelj, Oracle ViĹĄestruko (MySQL, PostgreSQL, SQLite, Itd.).
Značajke Zrelo (npr. odgođeno učitavanje) Moderno (npr. svojstva sjene, globalni filteri)

EF Core je moderno, aktivno razvijeno verzija i preporučeni izbor za nove .NET projekte zbog svoje fleksibilnosti i performansi.


22) Kako transakcije funkcioniraju u Entity Frameworku?

Transakcije u Entity Frameworku osiguravaju integritet podataka kada više operacija mora uspjeti ili propasti zajedno. Prema zadanim postavkama, EF se prelama SaveChanges() unutar transakcije. Za ručnu kontrolu:

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

To osigurava atomičnost - ako bilo koja naredba ne uspije, sve promjene se vraćaju.

EF se također integrira s Sustavne.Transakcije za podršku distribuiranih transakcija.


23) Objasnite strategije nasljeđivanja TPH, TPT i TPC u Entity Frameworku.

Entity Framework podržava tri glavne mape nasljeđivanjaping strategije za modeliranje hijerarhija klasa.

Strategija Description Primjer Prednosti Nedostaci
TPH (Tablica po hijerarhiji) Sve klase dijele jednu tablicu; stupac diskriminatora identificira tip. Uobičajeno u EF Coreu. Jednostavni, brzi upiti. Tablica može postati velika i rijetka.
TPT (Tablica po vrsti) Svaka podklasa ima svoju tablicu. Svaka izvedena klasa mapira zasebno. Normalizirana shema. Sporija spajanja na velikim hijerarhijama.
TPC (Tablica po klasi betona) Svaka klasa ima svoju tablicu s dupliciranim stupcima. Svaki entitet mapiran zasebno. Visokoučinkovito čitanje. Redundancija podataka.

Većina programera preferira TPH zbog svoje jednostavnosti, osim ako normalizacija ili potrebe za performansama ne nalažu drugačije.


24) Kako se rjeĹĄava podeĹĄavanje performansi u Entity Frameworku?

Za optimizaciju performansi Entity Frameworka:

  1. Koristiti AsNoTracking() za upite samo za čitanje.
  2. Nestrpljivo opterećenje samo potrebni povezani entiteti s .Include().
  3. Izbjegavajte N+1 upite koriĹĄtenjem projekcija ili Select().
  4. Koristite kompilirane upite za često izvođene operacije.
  5. Grupno viĹĄestruko umetanje/aĹžuriranje sa AddRange() i SaveChanges().
  6. Onemogući automatsko otkrivanje promjena za skupne operacije: context.Configuration.AutoDetectChangesEnabled = false;
  7. Koristite keĹĄiranje i paginaciju za velike skupove podataka.

Dobro podeĹĄena EF implementacija moĹže se pribliĹžiti performansama ADO.NET-a, a istovremeno zadrĹžati produktivnost programera.


25) Ĺ to je svojstvo shadow u Entity Framework Coreu?

A svojstvo sjene postoji u EF modelu, ali ne u klasi entiteta. OdrĹžava ga EF u promjeni tracker i pohranjen u bazi podataka.

Primjer:

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

To omogućuje EF-u pohranjivanje dodatnih metapodataka (npr. vremenskih oznaka, informacija o reviziji) bez mijenjanja klase entiteta.

Svojstvima sjene moĹžete pristupiti putem:

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

Svojstva sjene idealna su za scenarije zapisivanja ili revizije.


26) Što su pretvarači vrijednosti u EF Coreu?

Pretvarači vrijednosti u EF Coreu omogućuju transformaciju vrijednosti svojstava prilikom čitanja iz baze podataka ili pisanja u nju.

Na primjer, za pohranjivanje nabrajanja kao niza znakova:

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

To povećava fleksibilnost za prilagođene tipove podataka kao što su enum, bool, ili DateTimeOffset.

Pretvarači vrijednosti se također koriste za šifriranje, kompresija ili maskiranje osjetljivih podataka.


27) Ĺ to su globalni filteri upita i kako funkcioniraju?

Globalni filtri upita omogućuju automatsku primjenu uvjeta na sve upite za entitet.

Ovo je posebno korisno za meko brisanje or viĹĄestanarski.

Primjer:

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

Svaki upit izvršen prema Employee automatski isključuje blago izbrisane zapise, osim ako se izričito ne poništi.

Globalni filteri poboljĹĄavaju odrĹžavanje i sigurnost podataka.


28) Kako možete testirati Entity Framework kod pomoću jediničnih testova?

Za jedinično testiranje EF logike bez kontakta sa stvarnom bazom podataka, koristite baze podataka u memoriji or rugajući:

  • Opcija 1: PruĹžatelj usluga InMemory
    var options = new DbContextOptionsBuilder<AppDbContext>()
        .UseInMemoryDatabase("TestDb")
        .Options;
    
  • Opcija 2: LaĹžni DbContext
    ismijavati DbSet koriĹĄtenjem biblioteka poput MOQ za izolirano testiranje.

Jedinični testovi trebaju potvrditi:

  • Ispravnost upita (putem LINQ-a)
  • Konzistentnost podataka nakon SaveChanges()
  • Logika repozitorija

Testiranje s EF Core InMemory osigurava brzinu i izbjegava ovisnosti o SQL Serveru.


29) Objasnite obrasce repozitorija i jedinice rada u EF-u.

Ova dva arhitektonska obrasca pomaĹžu abstracpristup podacima i odrĹžavati transakcijsku konzistentnost.

Uzorak Svrha Primjer implementacije
skladište Enkapsulira CRUD operacije za svaki entitet. IRepository<T> sučelje s Add(), GetAll(), Itd
Jedinica rada Koordinira viĹĄe repozitorija unutar transakcije. SaveChanges() djeluje kao granica commita.

Primjer:

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

Ovi obrasci se poboljĹĄavaju provjerljivost, ponovna upotreba kodai razdvajanje koncerna u velikim poslovnim aplikacijama.


30) Koja je razlika između brzog učitavanja i projekcijskog učitavanja?

Aspekt Nestrpljivo učitavanje Učitavanje projekcije
Svrha Unaprijed učitava povezane podatke Učitava samo određena polja ili svojstva
način .Include() .Select()
Primjer context.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name })
Izvođenje Dohvaća cijele objekte Dohvaća minimalne podatke
Koristite slučaj Kada su za obradu potrebni povezani entiteti Kada su vam potrebni specifični lagani podaci

Projekcijsko opterećenje je optimizacija izvedbe što smanjuje opterećenje memorije odabirom samo potrebnih stupaca.


31) Što su presretači u Entity Framework Coreu?

Presretači u EF Coreu omogućuju programerima presretanje i mijenjanje operacija baze podataka kao što su izvršavanje upita, stvaranje naredbi i otvaranje veze.

Oni djeluju kao posredničke komponente između EF-a i pružatelja baze podataka.

Primjer: Zapisivanje svih izvrĹĄenih SQL naredbi.

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

Registrirate ga u DbContextOptionsBuilder:

optionsBuilder.AddInterceptors(new CommandInterceptor());

Prednosti:

  • PoboljĹĄano zapisivanje
  • Sigurnost (validacija upita)
  • Revizija i učinkovitost trackralj

32) Kako EF Core obrađuje asinhrone operacije?

Entity Framework Core u potpunosti podrĹžava asinkrono programiranje kroz metode kao ĹĄto su SaveChangesAsync(), ToListAsync()i FirstOrDefaultAsync().

Asinkrono izvršavanje pomaže poboljšati skalabilnost u web aplikacijama otpuštanjem niti dok se čekaju I/O operacije baze podataka.

Primjer:

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

Asinkrone operacije su posebno učinkovite kod visokopropusnih operacija. ASP.NET Core API-ji i mikroservise, smanjujući blokiranje poziva i poboljšavajući vrijeme odziva.


33) Ĺ to je otpornost veze u Entity Framework Coreu?

Otpornost veze pomaĹže vaĹĄoj aplikaciji automatski se oporavlja od privremenih kvarova baze podataka, kao ĹĄto su prekidi mreĹže ili SQL timeouti.

Može se konfigurirati na sljedeći način:

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

Ovdje će EF ponoviti neuspješne operacije do 5 puta sa zakašnjenjima.

Ovo je posebno korisno u okruženja hostirana u oblaku poput Azure SQL gdje su prolazne greške česte.


34) Koji su tipovi entiteta u vlasniĹĄtvu u EF Coreu?

Vlasnički entiteti omogućuju modeliranje vrijednosni objekti koji u potpunosti ovise o životnom ciklusu drugog entiteta.

Dijele isti stol kao i njihov vlasnik i ne mogu postojati samostalno.

Primjer:

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

konfiguracija:

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

Slučaj upotrebe:

Koncepti modeliranja poput Adresa, Novac, ili Mjerenje koje nemaju vlastiti identitet.


35) Kako moĹžete implementirati meka brisanja u Entity Framework Core?

Meko brisanje označava zapise kao izbrisane umjesto da ih fizički uklanja.

Oni se provode pomoću logička zastavica i globalni filteri upita.

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

U operaciji brisanja:

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

Prednosti:

  • Očuvanje povijesnih podataka
  • LakĹĄi oporavak

Nedostaci:

  • Veće tablice baze podataka
  • Zahtijeva paĹžljivu logiku filtriranja

36) Ĺ to je kompilirani model u EF Coreu i zaĹĄto se koristi?

U EF Coreu 6+, sastavljene modele omogućuju prethodnu kompilaciju metapodataka EF modela u .NET sklop, smanjujući vrijeme pokretanja i opterećenje tijekom izvođenja.

Koraci:

  1. Pokrenite naredbu: dotnet ef dbcontext optimize
  2. EF generira prethodno kompiliranu datoteku modela koju aplikacija brže učitava tijekom izvođenja.

Korist: Smanjuje latenciju inicijalizacije za 30–40%, posebno u velikim aplikacijama s mnogo entiteta.

Slučaj upotrebe: Visokoučinkoviti mikroservisi i okruženja bez servera.


37) Kako moĹžete implementirati keĹĄiranje u Entity Frameworku?

Predmemoriranje pomaže u smanjenju ponavljajućih upita u bazu podataka. Postoje dvije glavne razine:

Tip Description Primjer
Predmemorija prve razine Ugrađeno, po DbContext primjer Automatski upravljano
Predmemorija druge razine Vanjska predmemorija dijeljena u različitim kontekstima Koristite biblioteke poput EFCoreSecondLevelCacheInterceptor

Primjer za keĹĄiranje druge razine:

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

To značajno poboljšava performanse u aplikacije s puno čitanja izbjegavanjem redundantnih pogodaka u bazi podataka.


38) Kako EF Core upravlja tokenima i vremenskim oznakama konkurentnosti?

Tokeni istodobnosti sprječavaju konfliktna ažuriranja u okruženjima s više korisnika.

Svojstvo možete označiti kao token konkurentnosti pomoću [ConcurrencyCheck] or [Timestamp] atribut.

Primjer:

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

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

Kada dođe do ažuriranja, EF uključuje ovaj stupac u WHERE klauzula.

Ako se vrijednost ne podudara, a DbUpdateConcurrencyException je bačeno — osiguravajući optimistična kontrola konkurentnosti.


39) Kako implementirate reviziju (kreiranje, mijenjanje, brisanje trackralj) u EF Coreu?

Revizija tracks metapodaci kao ĹĄto su tko je stvorio, izmijenio ili izbrisao Records.

MoĹžete poniĹĄtiti 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();
}

Sučelje:

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

Ova metoda centralizira logiku revizije, osiguravajući dosljedno upravljanje podacima.


40) Koje su najbolje prakse za koriĹĄtenje Entity Frameworka u poslovnim aplikacijama?

Kategorija Najbolja vjeĹžba Korist
Izvođenje Koristiti AsNoTracking() i projekcije za upite samo za čitanje. Smanjuje režijske troškove.
dizajn Implementirajte obrasce repozitorija i jedinice rada. PoboljĹĄava odrĹživost.
Sigurnost Koristite parametrizirane upite kako biste izbjegli SQL injekciju. ZaĹĄtita podataka.
skalabilnost Koristite metode grupiranja veza i asinkrone metode. Podnosi velika opterećenja.
migracija Koristite automatizirane migracije s kontrolom verzija. Pojednostavljuje upravljanje shemom.
konfiguracija Eksternalizirajte nizove za povezivanje i tajne. Bolja izolacija od okoline.
Ispitivanje Koristite InMemory provider za jedinične testove. Brže probne vožnje.
Sječa drveta Omogućite EF zapisivanje za uvide u performanse. Lakše otklanjanje pogrešaka.

Ove prakse osiguravaju robustan, skalabilan i održiv aplikacije izgrađene na Entity Frameworku.


41) Kako moĹžete optimizirati LINQ upite za bolji SQL prijevod u Entity Frameworku?

Entity Framework automatski pretvara LINQ upite u SQL, ali neučinkoviti obrasci mogu proizvesti spor ili redundantan SQL. Optimizacija LINQ-a osigurava da ORM generira učinkovite upite bazi podataka.

Tehnike optimizacije:

Koristite projekcije:

  1. Odaberite samo potrebne stupce umjesto cijelih entiteta.
  2. var customers = context.Customers
        .Select(c => new { c.Id, c.Name })
        .ToList();
    
  3. Izbjegavajte evaluaciju na strani klijenta:
    Uvijek osigurajte filtriranje u SQL-u, a ne u memoriji. EF Core upozorava kada je evaluacija na strani klijenta.
  4. Koristiti AsNoTracking() za podatke samo za čitanje.
  5. var orders = context.Orders.AsNoTracking().ToList();
  6. Iskoristite kompilirane upite za ponovljene LINQ operacije.
  7. Izbjegavajte nepotrebno .Include() pozivi — uključite povezane podatke samo kada je to potrebno.

Primjer:

Neučinkovito:

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

Učinkovit:

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

42) Koji su različiti načini za postavljanje početnih podataka u EF Core?

Zasijevanje podataka osigurava da baza podataka ima zadani ili referentni podaci kada je stvoren.

Pristup 1: KoriĹĄtenje ModelBuildera

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

Ovo automatski unosi podatke tijekom Update-Database.

Pristup 2: Prilagođena metoda sjemena

Ručno izvršite kod pri pokretanju:

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

Pristup 3: SQL skripte

Koristite sirovi SQL u migracijama:

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

Preporuka:
Koristiti HasData() za statičke referentne podatke i programsko zasijavanje za dinamičke podatke za pokretanje.


43) Kako EF Core interno upravlja pruĹžateljima baza podataka?

EF Core je neovisno o pružatelju usluga, što znači da može ciljati više mehanizama baza podataka putem zasebnih paketi pružatelja usluga baze podataka.

Uobičajeni pružatelji usluga:

Davatelj NuGet Paket Baza podataka
SQL Server Microsoft.EntityFrameworkCore.SqlServer MSSQL
SQLite Microsoft.EntityFrameworkCore.Sqlite Mobilni/stolni uređaj
PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL PostgreSQL
MySQL Pomelo.EntityFrameworkCore.MySql MySQL
Kozmos DB Microsoft.EntityFrameworkCore.Cosmos NoSQL

Interno, EF Core koristi abstracslojevi za:

  • Prijevod upita
  • Generiranje SQL naredbi
  • Mapa tipova podatakaping

Svaki pružatelj implementira vlastite klase nasljeđujući osnovne abs-ove EF Corea.traccije (npr. RelationalDatabaseProvider, QuerySqlGenerator).


44) Što je „podijeljeni upit“ i kada ga treba koristiti?

Podijeljeni upiti sprječavaju izvođenje EF-a veliki, složeni spojevi izvršavanjem više SQL upita umjesto jednog.

Primjer:

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

Ovo izvrĹĄava:

  1. Upit 1 → Privlačenje kupaca
  2. Upit 2 → Dohvati narudžbe povezane s tim kupcima

Prednosti:

  • Sprječava velike Kartezijeve produkte.
  • PoboljĹĄava performanse s velikim povezanim skupovima podataka.

Nedostatak:

ViĹĄestruki povratni putevi do baze podataka.

Koristiti podijeljeni upiti prilikom brzog učitavanja velikih povezanih podataka koji mogu uzrokovati probleme s memorijom.


45) Kako možete učinkovito pratiti SQL naredbe generirane od strane EF-a?

Praćenje SQL-a pomaže u otklanjanju grešaka u sporim upitima i optimizaciji ORM ponašanja.

Metode za zapisivanje SQL-a:

  1. Zapisivanje u konzoli
  2. optionsBuilder
        .UseSqlServer(conn)
        .LogTo(Console.WriteLine, LogLevel.Information);
    
  3. Integracija s ILoggerFactoryjem
  4. var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    optionsBuilder.UseLoggerFactory(loggerFactory);
    
  5. presretači Implementirati DbCommandInterceptor za snimanje naredbi i vremena.
  6. Alati za profiliranje Koristite alate poput:
    • MiniProfiler
    • SQL Server Profiler
    • EFCorePowerTools

Zapisivanje bi trebalo biti omogućeno selektivno u produkciji kako bi se izbjegli dodatni troškovi performansi.


46) Koja je razlika između promjeneTracker.DetectChanges() i AutoDetectChangesEnabled?

svojstvo DetectChanges() AutoDetectChangesEnabled
Tip način Svojstvo
Svrha Prisiljava EF na skeniranje tracidentificirati entitete i otkriti promjene Omogućuje/onemogućuje automatsko otkrivanje promjena
Zadano Priručnik Pravi
Upotreba Izričito pozivanje na optimizaciju performansi Onemogući za skupna ažuriranja

Primjer:

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

Onemogućavanje automatskog otkrivanja u petljama poboljšava performanse do 40% u skupnim operacijama.


47) Kako se koriste vremenske tablice s EF Coreom?

Privremene tablice (uvedene u SQL Serveru 2016) omogućuju vam da track povijesnih podataka automatski.

Koraci:

  1. Omogući vremensku podršku u migraciji:
  2. builder.Entity<Employee>()
        .ToTable("Employees", b => b.IsTemporal());
    
  3. Upit za povijesne podatke:
  4. var history = context.Employees
        .TemporalAsOf(DateTime.UtcNow.AddDays(-7))
        .ToList();
    

Prednosti:

  • Ugrađena povijest podataka trackralj
  • Revizija i usklađenost
  • Nisu potrebni ručni okidači

EF Core 6+ podrĹžava potpuno temporalno upitavanje.


48) Kako EF Core podrĹžava kompilirane upite i unaprijed generirane modele zajedno?

Kompilirani upiti i kompilirani modeli su dva karakteristike izvedbe koje se međusobno nadopunjuju.

svojstvo Svrha
Kompilirani upiti Rezultati prijevoda upita iz predmemorije
Kompilirani modeli Metapodaci modela predkompiliranja

Primjer kompiliranog upita:

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

Upotreba:

var customer = _getCustomerById(context, 5);

Zajedno: Sastavljeni modeli smanjuju početni trošak, dok kompilirani upiti smanjuju opterećenje upita za vrijeme izvođenja — idealno za visokofrekventni upiti.


49) Koje su uobičajene zamke pri korištenju EF-a u mikroservisnoj arhitekturi?

Uobičajene pogreške:

  1. Dijeljeni DbContext među uslugama
    → Krši izolaciju mikroservisa.
    → Svaki mikroservis treba imati vlastiti DbContext i shemu.
  2. Pričljiva komunikacija (N+1 upita)
    → Minimizirajte EF upite po API pozivu.
  3. Prekomjerno žustro učitavanje
    → Učitajte samo ono što je potrebno putem DTO-a.
  4. Centralizirane migracije
    → Svaka usluga trebala bi samostalno upravljati vlastitim migracijama.
  5. Nedostatak transakcijskih granica
    → Koristite distribuirane transakcije (obrazac Outbox) ako je potrebna konzistentnost među uslugama.
  6. Čvrsto povezivanje s SQL pružateljem usluga
    → Koristite repozitorij abstrackako bi se održala fleksibilnost u izboru baze podataka.

50) Kako se injektiranje ovisnosti integrira s DbContextom u ASP.NET Coreu?

Entity Framework se besprijekorno integrira s Ugrađena injekcija ovisnosti (DI) u ASP.NET Coreu sustav.

Postaviti:

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

Zatim ga ubrizgajte u kontrolere ili servise:

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

Životni vijek:

Život Description Preporučeno za
Opseg Jedan kontekst po HTTP zahtjevu Zadano
prolazan Svaki put nova instanca Pozadinski poslovi
jedna stvar Dijeljeno globalno Izbjegavaj (nije sigurno za viĹĄe niti)

Korištenje DI-a osigurava testabilnost, upravljanje životnim ciklusomi učinkovitost resursa na webu i u pozadinskim procesima.


🔍 Najvažnija pitanja za intervju za Entity Framework sa scenarijima iz stvarnog svijeta i strateškim odgovorima

1) Ĺ to je Entity Framework i zaĹĄto se koristi u poslovnim aplikacijama?

Očekivano od kandidata: Anketar želi procijeniti vaše temeljno razumijevanje Entity Frameworka i njegove vrijednosti u stvarnim primjenama.

Primjer odgovora: Entity Framework je objektno-relacijska mapaping Okvir za .NET koji omogućuje programerima rad s bazama podataka pomoću .NET objekata umjesto sirovog SQL-a. Koristi se u poslovnim aplikacijama za poboljšanje produktivnosti, smanjenje standardnog koda za pristup podacima i održavanje snažne podjele odgovornosti.


2) Možete li objasniti razliku između Code Prvo, pristupi "baza podataka na prvom mjestu" i "model na prvom mjestu"?

Očekivano od kandidata: Anketar želi procijeniti vaše znanje o različitim razvojnim tijekovima rada i kada ih koristiti.

Primjer odgovora: Code Prvo započinje s klasama domene i generira bazu podataka iz koda. Database First započinje s postojećom bazom podataka i generira klase entiteta. Model First koristi vizualni dizajner za definiranje modela, a zatim stvara i kod i bazu podataka. Svaki pristup se odabire na temelju zahtjeva projekta i postojeće infrastrukture.


3) Kako Entity Framework obrađuje odnose između tablica?

Očekivano od kandidata: Anketar provjerava vaše razumijevanje modeliranja podataka i relacijske mape.ping.

Primjer odgovora: Entity Framework obrađuje odnose pomoću navigacijskih svojstava i stranih ključeva. Podržava odnose jedan-na-jedan, jedan-na-mnogo i više-na-mnogo, omogućujući programerima da pregledavaju povezane podatke pomoću referenci objekata umjesto spajanja.


4) Opišite situaciju u kojoj ste poboljšali performanse baze podataka pomoću Entity Frameworka.

Očekivano od kandidata: Anketar želi čuti praktičan primjer koji demonstrira vještine optimizacije.

Primjer odgovora: U prethodnoj ulozi poboljšao sam performanse smanjenjem nepotrebnog brzog učitavanja i implementacijom projekcijskih upita s naredbama Select. To je smanjilo količinu podataka dohvaćenih iz baze podataka i značajno smanjilo vrijeme izvršavanja upita.


5) Kako upravljate migracijama u Entity Frameworku?

Očekivano od kandidata: Anketar procjenjuje vaše iskustvo s promjenama sheme i kontrolom verzija.

Primjer odgovora: Migracije se upravljaju pomoću ugrađenih alata za migraciju koji track model se mijenja tijekom vremena. Na prethodnoj poziciji redovito sam generirao i pregledavao skripte za migraciju prije nego što sam ih primijenio kako bih osigurao integritet baze podataka u različitim okruženjima.


6) Što je lijeno učitavanje i kada biste ga trebali izbjegavati?

Očekivano od kandidata: Anketar želi provjeriti vaše razumijevanje strategija učitavanja podataka i kompromisa u performansama.

Primjer odgovora: Lijeno učitavanje automatski učitava povezane podatke kada im se pristupi. Izbjegavao bih njegovo korištenje u scenarijima ili API-jima kritičnim za performanse jer može uzrokovati više neželjenih poziva bazi podataka, što dovodi do problema s N+1 upitom.


7) Kako se obrađuju transakcije u Entity Frameworku?

Očekivano od kandidata: Anketar procjenjuje vaše znanje o konzistentnosti podataka i rukovanju pogreškama.

Primjer odgovora: Entity Framework podržava transakcije putem DbContext-a i TransactionScope-a. Na prethodnom poslu koristio sam eksplicitne transakcije kako bih osigurao da se više povezanih operacija baze podataka uspješno završi zajedno ili da se ponište u slučaju neuspjeha.


8) Objasnite kako se ubrizgavanje ovisnosti koristi s Entity Frameworkom.

Očekivano od kandidata: Anketar želi vidjeti koliko dobro razumijete modernu arhitekturu aplikacija.

Primjer odgovora: Ubrizgavanje ovisnosti koristi se za ubrizgavanje DbContext-a u servise ili kontrolere. To poboljšava mogućnost testiranja i održavanja omogućujući lažno kopiranje ili zamjenu konteksta bez promjene poslovne logike.


9) OpiĹĄite izazovnu greĹĄku na koju ste naiĹĄli s Entity Frameworkom i kako ste je rijeĹĄili.

Očekivano od kandidata: Anketar traži sposobnost rješavanja problema i vještine otklanjanja pogrešaka.

Primjer odgovora: U svojoj posljednjoj ulozi naiĹĄao sam na problem s tracsukobe kraljeva prilikom aĹžuriranja odvojenih entiteta. RijeĹĄio sam to eksplicitnim postavljanjem stanja entiteta i osiguravanjem da je samo jedna instanca svakog entiteta tracuvjetovano kontekstom.


10) Kako odlučiti kada Entity Framework nije pravi alat?

Očekivano od kandidata: Ispitivač želi razumjeti vašu prosudbu i sposobnost odabira odgovarajućih tehnologija.

Primjer odgovora: Razmatrao sam alternative kada aplikacije zahtijevaju izuzetno visokoučinkovit pristup podacima ili složenu logiku pohranjenih procedura. U takvim slučajevima, korištenje mikro-ORM-a ili sirovog ADO.NET-a može pružiti veću kontrolu i učinkovitost.

SaĹžmite ovu objavu uz: