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

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:
- Stvaranje â Entitet je instanciran u memoriji (stanje: odvojen).
- Attachment â Dodano u kontekst putem
DbSet.Add()(stanje: Dodano). - Modifikacija â Promjene se automatski otkrivaju (stanje: Promijenio).
- Upornost -
SaveChanges()pozvane â izvrĹĄene SQL naredbe. - 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:
- Koristiti
AsNoTracking()za upite samo za Äitanje. - Nestrpljivo optereÄenje samo potrebni povezani entiteti s
.Include(). - Izbjegavajte N+1 upite koriĹĄtenjem projekcija ili
Select(). - Koristite kompilirane upite za Äesto izvoÄene operacije.
- Grupno viĹĄestruko umetanje/aĹžuriranje sa
AddRange()iSaveChanges(). - OnemoguÄi automatsko otkrivanje promjena za skupne operacije:
context.Configuration.AutoDetectChangesEnabled = false; - 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
ismijavatiDbSetkoriĹĄ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:
- Pokrenite naredbu:
dotnet ef dbcontext optimize - 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:
- Odaberite samo potrebne stupce umjesto cijelih entiteta.
- Izbjegavajte evaluaciju na strani klijenta:
Uvijek osigurajte filtriranje u SQL-u, a ne u memoriji. EF Core upozorava kada je evaluacija na strani klijenta. - Koristiti
AsNoTracking()za podatke samo za Äitanje. - Iskoristite kompilirane upite za ponovljene LINQ operacije.
- Izbjegavajte nepotrebno
.Include()pozivi â ukljuÄite povezane podatke samo kada je to potrebno.
var customers = context.Customers
.Select(c => new { c.Id, c.Name })
.ToList();
var orders = context.Orders.AsNoTracking().ToList();
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:
- Upit 1 â PrivlaÄenje kupaca
- 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:
- Zapisivanje u konzoli
- Integracija s ILoggerFactoryjem
- presretaÄi Implementirati
DbCommandInterceptorza snimanje naredbi i vremena. - Alati za profiliranje Koristite alate poput:
- MiniProfiler
- SQL Server Profiler
- EFCorePowerTools
optionsBuilder
.UseSqlServer(conn)
.LogTo(Console.WriteLine, LogLevel.Information);
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); optionsBuilder.UseLoggerFactory(loggerFactory);
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:
- OmoguÄi vremensku podrĹĄku u migraciji:
- Upit za povijesne podatke:
builder.Entity<Employee>()
.ToTable("Employees", b => b.IsTemporal());
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:
- Dijeljeni DbContext meÄu uslugama
â KrĹĄi izolaciju mikroservisa.
â Svaki mikroservis treba imati vlastiti DbContext i shemu. - PriÄljiva komunikacija (N+1 upita)
â Minimizirajte EF upite po API pozivu. - Prekomjerno Ĺžustro uÄitavanje
â UÄitajte samo ono ĹĄto je potrebno putem DTO-a. - Centralizirane migracije
â Svaka usluga trebala bi samostalno upravljati vlastitim migracijama. - Nedostatak transakcijskih granica
â Koristite distribuirane transakcije (obrazac Outbox) ako je potrebna konzistentnost meÄu uslugama. - Ä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.
