Az 50 legfontosabb entitáskeret-interjúkérdés és válasz (2026)
Az Entity Framework interjúra való felkészülés azt jelenti, hogy előre kell látni azokat a kérdéseket, amelyek feltárják a valódi képességeket. Az Entity Framework interjúkérdései feltárják a gondolkodásmódot, a teljesítménytudatosságot és azt, hogy a jelöltek hogyan ültetik át a koncepciókat a gyakorlatba.
Az Entity Framework elsajátítása a modern fejlesztés területén nyitja meg a lehetőségeket, az adatvezérelt platformoktól a felhőszolgáltatásokig. A gyakorlati tapasztalat fejleszti az analitikus képességeket, erősíti a technikai mélységet és támogatja a csapatokat. A toborzó vezetők nagyra értékelik a gyakorlati problémamegoldást, a skálázható tervezést, a fiatalabbak mentorálását és a frissdiplomások fejlődési útjait. Olvass tovább…
👉 Ingyenes PDF letöltés: Entity Framework interjúkérdések és válaszok
Legfontosabb Entity Framework interjúkérdések és válaszok
1) Mi az Entity Framework és miért használják?
Az Entity Framework (EF) MicrosoftORM (objektum-relációs térkép)ping) keretrendszer .NET-hez, amely leegyszerűsíti az adatbázis-interakciót azáltal, hogy lehetővé teszi a fejlesztők számára, hogy az adatokkal erősen típusos .NET objektumokként dolgozzanak a nyers SQL helyettEz a hasizmoktracAz tion lehetővé teszi a fejlesztők számára, hogy CRUD (Create, Read, Update, Delete) műveleteket végezzenek ismerős C# konstrukciók használatával, és a keretrendszer a motorháztető alatt kezeli ezen műveletek optimalizált SQL lekérdezésekké alakítását. Az EF csökkenti a sablonos adathozzáférési kódot, javítja a karbantarthatóságot, és segít a fordítási idejű típusbiztonság érvényesítésében.
Például SQL írása helyett használhatja:
var customers = context.Customers.Where(c => c.IsActive).ToList();
Az EF lefordítja ezt a LINQ lekérdezést SQL-be, végrehajtja az adatbázison, és az eredményeket objektumként adja vissza.
2) Magyarázza el a különbséget Code Először az Adatbázis Először és a Modell Először megközelítések.
Az Entity Framework három fő fejlesztési megközelítést támogat:
| Megközelítés | Mikor kell használni? | Mi történik |
|---|---|---|
| Code vezetéknév | Új projektek vagy szakterület-vezérelt tervezés | Az entitásosztályokat definiálod. Az EF kódból generálja az adatbázis sémáját. |
| Adatbázis először | Meglévő adatbázis | Az EF egy meglévő sémából generál entitásosztályokat és kontextust. |
| Modell First | Amikor a vizuális tervezést részesíted előnyben | A modellt egy vizuális tervezőben (Entity Designer) tervezed meg, az EF pedig mind az osztályokat, mind az adatbázist generálja. |
Minden megközelítés különböző forgatókönyveket szolgál ki: Code vezetéknév népszerű az agilis fejlesztésben, Adatbázis először előnyben részesítendő a korábbi adatbázisokkal, és Modell First olyan esetekre alkalmas, ahol a vizuális modellezés fontos.
3) Mi a DbContext és milyen szerepet játszik az EF-ben?
DbContext az elsődleges osztály, amely kezeli a munkamenet az adatbázissal, tracks entitásváltozásokat, és koordinálja az adatok adatbázisba való visszamentését. Hidat képez a C# alkalmazás és az adatbázis között. DbContext, te definiálod DbSet<TEntity> tulajdonságok, amelyek entitások gyűjteményeit jelölik, és az adatbázis tábláira vannak leképezve.
Példa:
public class AppDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
Itt, Products CRUD műveletek végrehajtásához használt gyűjteményként működik. Az EF ezt a kontextust használja a következőre: track objektumállapot és SQL parancsokat generáljon SaveChanges().
4) Mik azok a migrációk az Entity Frameworkben, és hogyan használják őket?
Migrációk egy mechanizmust jelentenek arra, hogy track és alkalmazza sémaváltozások az adatbázishoz idővel. Ahogy a modell fejlődik, a migrációk segítenek szinkronban tartani az adatbázist az SQL-szkriptek manuális módosítása nélkül. Code Először is, olyan parancsokat használsz, mint:
Add-Migration InitialCreate Update-Database
Ez migrációs osztályokat generál, amelyek meghatározzák a sémamódosításokat, és alkalmazzák azokat az adatbázisra. A migrációk lehetővé teszik az adatbázisséma verziókövetését, és megkönnyítik az együttműködésen alapuló fejlesztést.
5) Írd le a lusta betöltést, a lelkes betöltést és a kifejezett betöltést.
Az EF-ben kritikus fontosságú a kapcsolódó adatok hatékony betöltése. Íme egy összehasonlítás:
| Stratégia | Amikor fut | Tipikus felhasználás |
|---|---|---|
| Lazy betöltése | Kapcsolódó adatok betöltése az első hozzáféréskor | Akkor használja, ha a kapcsolódó adatokra nincs mindig szükség. |
| Buzgó betöltés | Kapcsolódó adatok előzetesen betöltve a következőn keresztül: .Include() |
Használja, ha tudja, hogy kapcsolódó adatokra van szüksége. |
| Kifejezett betöltés | Manuálisan betöltve a lekérdezés után | Pontosan szabályozza, hogy mikor töltődnek be a kapcsolódó adatok. |
Például:
var orders = context.Orders.Include(o => o.Customer).ToList(); // Eager
A késleltetett betöltés segít csökkenteni a kezdeti lekérdezéseket, de okozhat N+1 lekérdezési problémák ha nem körültekintően használják.
6) Mi a változás? trackirály az Entity Frameworkben?
Változtat traca király az EF belső mechanizmusa entitás állapotváltozásainak monitorozása egy lekérdezés végrehajtása után. Amikor egy entitást a DbContext, ez tracked. A tulajdonságaiban bekövetkezett bármilyen módosítást feljegyeznek, és amikor SaveChanges() meghívásakor az EF előállítja a megfelelő SQL-t INSERT, UPDATEvagy DELETE utasítások. Csak olvasható forgatókönyvek esetén, ahol traca király felesleges, AsNoTracking() javítja a teljesítményt a változtatások letiltásával trackirály.
7) Hogyan kezeli az Entity Framework a konkurencia ütközéseit?
A párhuzamosságvezérlés biztosítja, hogy az ugyanazon adatokat frissítő több felhasználó ne írja felül véletlenül egymás módosításait. Az EF a következőt használja: optimista párhuzamosság alapértelmezés szerint. Egy gyakori megközelítés egy párhuzamossági token (mint egy RowVersion időbélyeg). Az EF ezt a tokent ellenőrzi a következő folyamat során: SaveChanges(), és ha eltér az adatbázis verziójától, akkor a DbUpdateConcurrencyException hibakód keletkezik, ami ütközést jelez. A fejlesztők ezután kezelhetik ezt a kivételt az újrapróbálkozáshoz vagy az adatbeli eltérések feloldásához.
8) Mik a navigációs tulajdonságok az EF-ben?
A navigációs tulajdonságok definiálják az entitások közötti kapcsolatokat. Ezek lehetővé teszik az EF számára, hogy navigálj az asszociációkban (pl. egy-a-többhöz) manuális illesztések nélkül:
public class Order
{
public int Id { get; set; }
public Customer Customer { get; set; }
}
Itt, Customer egy navigációs tulajdonság, amely összekapcsolja Order a kapcsolódó CustomerAz EF ezeket a tulajdonságokat használja kapcsolatok és illesztések automatikus felépítéséhez lekérdezések során. A navigációs tulajdonságok a következőkkel együtt működnek: idegen kulcsok hogy modelleket alkossanak a kapcsolatokhoz.
9) Mi az AsNo célja?Tracking()?
AsNoTracking() letiltja a változtatást trackirály egy lekérdezéshez, ami hasznos a csak olvasható olyan műveletek, amelyeknél nem kívánja frissíteni a lekért entitásokat. Ez a memóriahasználat csökkentésével javítja a teljesítményt, és tracnagy többletterhelést jelent. Különösen hasznos nagy adathalmazok módosítás nélküli lekérésekor.
10) Mik azok a fordított lekérdezések, és mikor érdemes őket használni?
A fordított lekérdezések teljesítményoptimalizálási technikák. Amikor egy LINQ lekérdezés végrehajtásra kerül, az EF jellemzően minden alkalommal SQL-lé alakítja azt. A fordított lekérdezéseknél ez a fordítás egyszer történik meg, és az eredményül kapott delegáltat újra felhasználják – ezáltal csökkentve a gyakran végrehajtott vagy összetett lekérdezések terhelését. Használja őket a következőben: nagy forgalmú olyan forgatókönyvek, ahol ugyanaz a lekérdezés ismételten fut különböző paraméterekkel.
11) Mik az entitásállapotok az Entity Frameworkben, és hogyan befolyásolják a SaveChanges() függvényt?
Entitás keretrendszer tracks minden entitás voltak annak meghatározása, hogy milyen adatbázisműveletet kell végrehajtani SaveChanges()A fő entitásállapotok a következők:
| Állami | Leírás | Operació aktiválva |
|---|---|---|
| Hozzáadott | Új entitás beillesztése | INSERT |
| Módosított | Meglévő entitás frissítve | UPDATE |
| Törölve | Eltávolításra megjelölt entitás | DELETE |
| Változatlan | Nem észleltek változásokat | Egyik sem |
| Különálló | Nem trackontextus által befolyásolt | Egyik sem |
Amikor hívsz SaveChanges()Az EF függvény megvizsgálja az entitások állapotait, és végrehajtja a megfelelő SQL parancsokat. Például egy új entitás hozzáadódik egy DbSet meg lesz jelölve Hozzáadott, ami egy INSERT lekérdezés.
Példa:
context.Entry(product).State = EntityState.Modified; context.SaveChanges();
Ez explicit módon frissíti az entitás adatbázisrekordját.
Az államok megértése jobb kontrollt biztosít az adatszinkronizáció és a teljesítmény felett.
12) Milyen előnyei és hátrányai vannak az Entity Framework használatának?
Az Entity Framework jelentős előnyöket kínál, de bizonyos kompromisszumokkal is jár, a felhasználási esettől függően.
| Előnyök | Hátrányok |
|---|---|
| Leegyszerűsíti az adathozzáférést LINQ és objektummodellek segítségével. | Teljesítménybeli többletterhelés a nyers ADO.NET-hez képest. |
| Csökkenti a sablonos SQL-kódot. | Az összetett lekérdezések nem hatékony SQL-t eredményezhetnek. |
| Több adatbázis-szolgáltatót támogat. | Nehezebb hibakeresni a generált SQL utasításokat. |
| Erősen típusos, javítva a fordítási idejű biztonságot. | Nagyobb csapatokban migrációs konfliktusok lehetségesek. |
| Lehetővé teszi a gyors prototípusgyártástping ahol Code Első. | Less finomhangolt lekérdezések feletti ellenőrzés. |
A maximális teljesítményt igénylő nagyméretű rendszerek esetében a fejlesztők továbbra is keverhetik a nyers SQL EF-fel az optimalizálás érdekében.
13) Hogyan kezeli az Entity Framework a kapcsolatokat (egy-egyhez, egy-sokhoz, sok-sokhoz)?
Az Entity Framework a kapcsolatokat a következőn keresztül kezeli: navigációs tulajdonságok és a idegen kulcskapcsolatok.
A kapcsolatok típusai a következők:
| Kapcsolattípus | Leírás | Példa |
|---|---|---|
| XNUMX-XNUMX | Minden entitáspéldányhoz egy kapcsolódó entitás tartozik. | User ↔ UserProfile |
| Egy a sokhoz | Egy entitás több másikkal is kapcsolatban áll. | Customer → Orders |
| Sok-sok | Több entitás kapcsolódik egymáshoz. | Student ↔ Course |
Példa egy Egy a sokhoz kapcsolat:
public class Customer
{
public int CustomerId { get; set; }
public ICollection<Order> Orders { get; set; }
}
Az EF automatikusan generál idegen kulcsokat és handle-öket kaszkád törlési szabályok konfigurációtól függően.
Ön is használja Fluent API a pontosabb kapcsolati térképértping.
14) Mi a különbség a LINQ to Entities és a LINQ to SQL között?
| Jellemző | LINQ az entitásokhoz | LINQ az SQL-hez |
|---|---|---|
| Támogatott adatbázisok | Többszörös (SQL Server, Oracle, MySQLStb) | Csak SQL Server |
| Alapvető keretrendszer | Entitás keretrendszer | ADO.NET |
| Modell | Fogalmi entitásmodell | Csak adatbázistáblák |
| Térképping | Komplex térképping (öröklés, egyesületek) | Közvetlen táblázat térképping |
| Jövőbeli támogatás | Aktívan támogatott | Elavult |
LINQ az entitásokhoz az Entity Framework része és sokoldalúbb, miközben LINQ az SQL-hez az SQL Serverre és az egyszerűbb használati esetekre korlátozódik.
Ezért a LINQ to Entities ajánlott vállalati szintű fejlesztéshez.
15) Mi a különbség az ObjectContext és a DbContext között?
| Jellemző | Objektumkörnyezet | DbContext |
|---|---|---|
| Keretrendszer | Korábbi EF verziók | Egyszerűsített API az EF 4.1+ verzióban |
| Bonyolultság | Bővebben fogalmazva | Könnyű és egyszerű |
| Teljesítmény | Kicsit gyorsabb, de nehezebben használható | Egyszerűsített, minimális rezsivel |
| Változtat Tracking | Manuális konfiguráció szükséges | Automatikus trackirály |
| Előnyben részesített használat | Legacy rendszerek | Modern EF / EF Core projektek |
DbContext belső csomagolások ObjectContext de tisztább és intuitívabb API-t biztosít. A legtöbb jelenlegi .NET alkalmazásnak ezt kellene használnia DbContext.
16) Magyarázza el egy entitás életciklusát az Entity Frameworkben.
Egy entitás életciklusa leírja annak állapotátmenetek a teremtéstől a fennmaradásig:
- Gyors létrehozás – Az entitás példányosodik a memóriában (állapot: Különálló).
- Attachment – Hozzáadva a kontextushoz a következő módon:
DbSet.Add()(állami: Hozzáadott). - Módosítás – Automatikusan észlelt változások (kérjük, adja meg: Módosított).
- Kitartás -
SaveChanges()meghívott → SQL parancsok végrehajtása. - törlés – Entitás megjelölve mint Törölve és eltávolították az adatbázisból.
Ennek az életciklusnak a megértése segít az adatproblémák hibakeresésében és az EF-kontextus-kezelés optimalizálásában.
17) Mire jó a Fluent API az Entity Frameworkben?
Az Fluent API programozott módot biztosít a modellkapcsolatok, a korlátozások és a térkép konfigurálásárapings, gyakran használják a OnModelCreating() a módszered DbContext.
Finomhangolt vezérlést biztosít a konfigurációk felett, amelyek adatjegyzetek nem tudja kifejezni.
Példa:
modelBuilder.Entity<Customer>()
.HasMany(c => c.Orders)
.WithOne(o => o.Customer)
.HasForeignKey(o => o.CustomerId);
A Fluent API különösen hatékony a konfiguráláshoz összetett kulcsok, sok-sok kapcsolatés kaszkád szabályok.
18) Mik azok az adatannotációk az Entity Frameworkben?
Az adatmegjegyzések a következők: attribútumok közvetlenül modellosztályokra vagy tulajdonságokra alkalmazhatók a séma viselkedésének meghatározásához. Egyszerűbbek, mint a Fluent API, de kevésbé rugalmasak.
Példa:
public class Product
{
[Key]
public int ProductId { get; set; }
[Required]
[StringLength(50)]
public string Name { get; set; }
}
Az annotációk kulcsokat, karakterláncok hosszát, kötelező mezőket és kapcsolatokat határoznak meg. Összetett esetekben a fejlesztők általában kombinálják a Adatjegyzetek és a Fluent API.
19) Mi a különbség a között tracked és UNtracKed entitások az EF Core-ban?
| típus | Leírás | Használja az ügyet |
|---|---|---|
| TracKed Entities | Felügyeli DbContext változtatásokhoz. |
Alapértelmezett viselkedés a frissítéseknél. |
| UntracKed Entities | Nem monitorozott; lekérve a következővel: .AsNoTracking(). |
Ideális csak olvasható műveletekhez. |
TracA ked entitások több memóriát fogyasztanak, de lehetővé teszik az EF számára, hogy automatikusan észlelje a változásokat.
Untracked entitások fokozzák teljesítmény sok olvasási, kevés frissítési forgatókönyvekben.
20) Hogyan lehet nyers SQL lekérdezéseket végrehajtani az Entity Frameworkben?
Az Entity Framework lehetővé teszi a nyers SQL végrehajtását egyéni vagy teljesítménykritikus lekérdezésekhez.
var result = context.Products
.FromSqlRaw("SELECT * FROM Products WHERE Price > 100")
.ToList();
Nem lekérdezési parancsok esetén:
context.Database.ExecuteSqlRaw("DELETE FROM Products WHERE Discontinued = 1");
Használja ezt a funkciót óvatosan, hogy elkerülje SQL injektálás és fenntartja az adatbázis-független rugalmasságot.
21) Mi a különbség az Entity Framework és az Entity Framework Core között?
Az Entity Framework (EF) és az Entity Framework Core (EF Core) architektúrájában, képességeiben és platformfüggetlen támogatásában különböznek.
| Jellemző | Entitáskeretrendszer 6 (EF6) | Entitás-keretrendszer mag |
|---|---|---|
| Emelvény | Csak .NET keretrendszer | Többplatformos (.NET 5/6/7) |
| Architectúra | ObjectContext alapján | Könnyű és moduláris |
| Teljesítmény | Lassabb bizonyos lekérdezésekben | Optimalizált lekérdezésgenerálás |
| LINQ-támogatás | Érett, de korlátozott | Továbbfejlesztett fordítás és aszinkron |
| Adatbázis-szolgáltatók | SQL szerver, Oracle | Többszörös (MySQL, PostgreSQL, SQLiteStb) |
| Jellemzők | Érett (pl. lusta berakodás) | Modern (pl. árnyék tulajdonságok, globális szűrők) |
Az EF Core a modern, aktívan fejlesztett verzió, és rugalmassága és teljesítménye miatt az új .NET projektekhez ajánlott választás.
22) Hogyan működnek a tranzakciók az Entity Frameworkben?
Az Entity Framework tranzakciói biztosítják adat integritását amikor több műveletnek egyszerre kell sikeresnek vagy sikertelennek lennie. Alapértelmezés szerint az EF tördeli a SaveChanges() egy tranzakción belül. Manuális vezérléshez:
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();
}
}
Ez biztosítja az atomicitást – ha bármelyik parancs meghiúsul, az összes módosítás visszavonásra kerül.
Az EF integrálható a következővel is: System.Transactions elosztott tranzakciók támogatásához.
23) Magyarázza el a TPH, TPT és TPC öröklési stratégiákat az Entity Frameworkben.
Az Entity Framework három fő öröklési térképet támogatping Osztályhierarchiák modellezésének stratégiái.
| Stratégia | Leírás | Példa | Előnyök | Hátrányok |
|---|---|---|---|---|
| TPH (Tábla hierarchiánként) | Minden osztály egy táblázatot használ; egy diszkriminátor oszlop azonosítja a típust. | Gyakori az EF Core-ban. | Egyszerű, gyors lekérdezések. | Az asztal nagy és széteshet. |
| TPT (Táblázat típusonként) | Minden alosztálynak saját táblázata van. | Minden származtatott osztály külön leképezést végez. | Normalizált séma. | Lassabb illesztések nagy hierarchiákon. |
| TPC (Betonosztályonkénti táblázat) | Minden osztálynak saját táblázata van, ismétlődő oszlopokkal. | Minden entitás külön leképezve. | Nagy teljesítményű olvasás. | Adatredundancia. |
A legtöbb fejlesztő előnyben részesíti TPH az egyszerűség kedvéért, kivéve, ha a normalizálás vagy a teljesítményigény másként kívánja.
24) Hogyan kezeled a teljesítményhangolást az Entity Frameworkben?
Az Entity Framework teljesítményének optimalizálása:
- Felhasználás
AsNoTracking()csak olvasható lekérdezések esetén. - Lelkes terhelés csak a szükséges kapcsolódó entitások
.Include(). - Kerülje az N+1 lekérdezéseket vetítések segítségével, vagy
Select(). - Fordított lekérdezések használata gyakran futtatott műveletekhez.
- Több beszúrás/frissítés kötegelt feldolgozása ahol
AddRange()és aSaveChanges(). - Automatikus változtatások észlelésének letiltása tömeges műveletek esetén:
context.Configuration.AutoDetectChangesEnabled = false; - Használja a gyorsítótárat és a lapozást nagy adathalmazok esetén.
Egy jól hangolt EF implementáció megközelítheti az ADO.NET teljesítményét, miközben megőrzi a fejlesztők termelékenységét.
25) Mi az árnyék tulajdonság az Entity Framework Core-ban?
A árnyéktulajdon létezik az EF modellben, de nem az entitásosztályban. Az EF tartja karban a változás során. tracker és tárolva van az adatbázisban.
Példa:
modelBuilder.Entity<Order>()
.Property<DateTime>("LastUpdated");
Ez lehetővé teszi az EF számára, hogy extra metaadatokat (pl. időbélyegeket, auditinformációkat) tároljon az entitásosztály módosítása nélkül.
Az árnyék tulajdonságait a következőképpen érheted el:
var value = context.Entry(order).Property("LastUpdated").CurrentValue;
Az árnyéktulajdonságok ideálisak naplózási vagy auditálási forgatókönyvekhez.
26) Mik azok az értékátalakítók az EF Core-ban?
Az EF Core értékkonverterei lehetővé teszik a tulajdonságértékek átalakítását az adatbázisból való olvasás vagy az adatbázisba való írás során.
Például egy enumeráció karakterláncként való tárolásához:
modelBuilder.Entity<Employee>()
.Property(e => e.Status)
.HasConversion(
v => v.ToString(),
v => (EmployeeStatus)Enum.Parse(typeof(EmployeeStatus), v));
Ez növeli a rugalmasságot az egyéni adattípusok, például enum, boolvagy DateTimeOffset.
Az értékátalakítókat arra is használják, hogy titkosítás, tömörítés vagy maszkolás érzékeny adatokról.
27) Mik azok a globális lekérdezésszűrők, és hogyan működnek?
A globális lekérdezésszűrők lehetővé teszik a feltételek automatikus alkalmazását egy entitás összes lekérdezésére.
Ez különösen hasznos lágy törlések or több bérlés.
Példa:
modelBuilder.Entity<Employee>()
.HasQueryFilter(e => !e.IsDeleted);
Minden lekérdezés, amelyet a következő ellen hajtottak végre: Employee automatikusan kizárja a mentesített rekordokat, kivéve, ha explicit módon felül van írva.
A globális szűrők javítják a karbantarthatóságot és az adatbiztonságot.
28) Hogyan lehet az Entity Framework kódját egységtesztekkel tesztelni?
EF logika egységteszteléséhez valós adatbázisba való ütközés nélkül használd a következőt: memórián belüli adatbázisok or gúnyos:
- 1. lehetőség: InMemory szolgáltató
var options = new DbContextOptionsBuilder<AppDbContext>() .UseInMemoryDatabase("TestDb") .Options; - 2. lehetőség: Minta DbContext
utánzottDbSetkönyvtárak használata, mint például Mennyiségi egység izolált teszteléshez.
Az egységteszteknek validálniuk kell:
- Lekérdezés helyessége (LINQ-n keresztül)
- Adatkonzisztencia után
SaveChanges() - Tároló logikája
Az EF Core InMemory-val történő tesztelés biztosítja a sebességet és elkerüli az SQL Servertől való függőségeket.
29) Magyarázza el az EF repository és unit of Work mintáit.
Ez a két építészeti minta segít abstracadathozzáférés és a tranzakciós konzisztencia fenntartása.
| Mintás | Cél | Megvalósítási példa |
|---|---|---|
| raktár | Magában foglalja az egyes entitások CRUD-műveleteit. | IRepository<T> felülettel Add(), GetAll()Stb |
| Munkaegység | Több adattárat koordinál egy tranzakción belül. | SaveChanges() véglegesítési határként működik. |
Példa:
public class UnitOfWork : IUnitOfWork
{
private readonly AppDbContext _context;
public void Commit() => _context.SaveChanges();
}
Ezek a minták javulnak tesztelhetőség, kód újrafelhasználásaés az aggodalmak szétválasztása nagyvállalati alkalmazásokban.
30) Mi a különbség a lelkes betöltés és a vetítési betöltés között?
| Aspect | Buzgó betöltés | Vetítés betöltése |
|---|---|---|
| Cél | Előre betölti a kapcsolódó adatokat | Csak bizonyos mezőket vagy tulajdonságokat tölt be |
| Módszer | .Include() |
.Select() |
| Példa | context.Orders.Include(o => o.Customer) |
context.Orders.Select(o => new { o.Id, o.Customer.Name }) |
| Teljesítmény | Teljes objektumokat kér le | Minimális adatmennyiséget kér le |
| Használja az ügyet | Amikor kapcsolódó entitásokra van szükség a feldolgozáshoz | Amikor speciális, könnyűsúlyú adatokra van szükség |
A vetítési betöltés egy teljesítmény optimalizálása amely csak a szükséges oszlopok kiválasztásával csökkenti a memóriaterhelést.
31) Mik az interceptorok az Entity Framework Core-ban?
Az EF Core interceptorai lehetővé teszik a fejlesztők számára az adatbázis-műveletek elfogását és módosítását, például lekérdezés végrehajtása, parancs létrehozása és kapcsolat megnyitása.
Köztes szoftverkomponensként működnek az EF és az adatbázis-szolgáltató között.
Példa: Az összes végrehajtott SQL parancs naplózása.
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);
}
}
Regisztrálod a DbContextOptionsBuilder:
optionsBuilder.AddInterceptors(new CommandInterceptor());
Előnyök:
- Továbbfejlesztett naplózás
- Biztonság (lekérdezés-érvényesítés)
- Auditálás és teljesítmény trackirály
32) Hogyan kezeli az EF Core az aszinkron műveleteket?
Az Entity Framework Core teljes mértékben támogatja az aszinkron programozás módszerekkel, mint pl SaveChangesAsync(), ToListAsync()és FirstOrDefaultAsync().
Az aszinkron végrehajtás segít javítja a skálázhatóságot webes alkalmazásokban szálak felszabadításával, amíg I/O-hoz kötött adatbázis-műveletekre várnak.
Példa:
var customers = await context.Customers
.Where(c => c.IsActive)
.ToListAsync();
Az aszinkron műveletek különösen hatékonyak nagy áteresztőképességű esetekben. ASP.NET Core API-k és mikroszolgáltatások, csökkentve a blokkoló hívásokat és javítva a válaszidőket.
33) Mit jelent a kapcsolati rugalmasság az Entity Framework Core-ban?
A kapcsolat rugalmassága segíti az alkalmazást automatikus helyreállítás átmeneti adatbázis-hibák után, például hálózati megszakítások vagy SQL időtúllépések.
A következőképpen konfigurálható:
optionsBuilder.UseSqlServer(
connectionString,
options => options.EnableRetryOnFailure(5, TimeSpan.FromSeconds(10), null)
);
Itt az EF akár 5 alkalommal is megpróbálkozik a sikertelen műveletekkel, késésekkel.
Ez különösen hasznos a felhőalapú környezetek mint Azure SQL, ahol gyakoriak az átmeneti hibák.
34) Milyen típusú tulajdonolt entitások vannak az EF Core-ban?
A tulajdonolt entitások lehetővé teszik a modellezést értékobjektumok amelyek teljes mértékben egy másik entitás életciklusától függenek.
Ugyanazt a táblát használják, mint a tulajdonosuk, és nem létezhetnek függetlenül.
Példa:
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; }
}
Konfiguráció:
modelBuilder.Entity<Customer>().OwnsOne(c => c.Address);
Felhasználási eset:
Modellezési koncepciók, mint például Székhely, Pénzvagy Mérés amelyeknek nincs saját identitásuk.
35) Hogyan lehet soft delete-eket implementálni az Entity Framework Core-ban?
A soft delete-ek töröltként jelölik meg a rekordokat a fizikai eltávolításuk helyett.
Egy logikai jelző és a globális lekérdezésszűrők.
modelBuilder.Entity<Employee>()
.HasQueryFilter(e => !e.IsDeleted);
A törlési műveletben:
employee.IsDeleted = true; context.Update(employee); context.SaveChanges();
Előnyök:
- Történelmi adatok megőrzése
- Könnyebb felépülés
Hátrányok:
- Nagyobb adatbázistáblák
- Gondos szűrési logikát igényel
36) Mi a fordított modell az EF Core-ban, és miért használják?
Az EF Core 6+-ban összeállított modellek Lehetővé teszi az EF modell metaadatainak előfordítását egy .NET assembly-be, csökkentve az indítási időt és a futásidejű terhelést.
Lépések:
- Futtassa a parancsot:
dotnet ef dbcontext optimize - Az EF egy előre lefordított modellfájlt generál, amelyet az alkalmazás futásidőben gyorsabban betölt.
Haszon: 30–40%-kal csökkenti az inicializálási késleltetést, különösen nagyméretű, sok entitást tartalmazó alkalmazások esetén.
Felhasználási eset: Nagy teljesítményű mikroszolgáltatások és szerver nélküli környezetek.
37) Hogyan lehet gyorsítótárat implementálni az Entity Frameworkben?
A gyorsítótárazás segít csökkenteni az ismétlődő adatbázis-lekérdezéseket. Két fő szint létezik:
| típus | Leírás | Példa |
|---|---|---|
| Első szintű gyorsítótár | Beépített, darabonként DbContext példa |
Automatikusan kezelt |
| Másodszintű gyorsítótár | Külső gyorsítótár megosztása kontextusok között | Használjon olyan könyvtárakat, mint a EFCoreSecondLevelCacheInterceptor |
Példa a második szintű gyorsítótárazásra:
services.AddEFSecondLevelCache(options =>
{
options.UseMemoryCacheProvider().DisableLogging(false);
});
Ez jelentősen javítja a teljesítményt a olvasásigényes alkalmazások a redundáns adatbázis-találatok elkerülésével.
38) Hogyan kezeli az EF Core a párhuzamos működésű tokeneket és időbélyegeket?
Párhuzamossági tokenek megakadályozzák ütköző frissítések többfelhasználós környezetekben.
Egy tulajdonságot párhuzamossági tokenként jelölhet meg a következő használatával: [ConcurrencyCheck] or [Timestamp] tulajdonság.
Példa:
public class Product
{
public int Id { get; set; }
[Timestamp]
public byte[] RowVersion { get; set; }
}
Frissítéskor az EF ezt az oszlopot is belefoglalja a WHERE kikötés.
Ha az érték eltér, akkor a DbUpdateConcurrencyException eldobják – biztosítva optimista párhuzamosságvezérlés.
39) Hogyan valósítja meg az auditálást (létrehozott, módosított, törölt)? trackirály) az EF Core-ban?
Könyvvizsgálat tracks metaadatok, például ki hozta létre, módosította vagy törölte nyilvántartást.
Felülírhatja 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();
}
Interfész:
public interface IAuditable
{
DateTime Created { get; set; }
DateTime LastModified { get; set; }
}
Ez a módszer központosítja az audit logikát, biztosítva következetes adatkezelés.
40) Melyek az Entity Framework vállalati alkalmazásokban való használatának legjobb gyakorlatai?
| Kategória | Legjobb gyakorlat | Előny |
|---|---|---|
| Teljesítmény | Felhasználás AsNoTracking() és a csak olvasható lekérdezésekre vonatkozó vetítések. |
Csökkenti a rezsiköltségeket. |
| Tervezés | Implementálja a tárház és a munkaegység mintákat. | Javítja a karbantarthatóságot. |
| Biztonság | Használjon paraméteres lekérdezéseket az SQL-befecskendezés elkerülése érdekében. | Adat védelem. |
| Bővíthetőség | Használjon kapcsolat-pooling és aszinkron metódusokat. | Nagy terhelést bír. |
| Migrációk | Használjon automatizált migrációkat verziókövetéssel. | Leegyszerűsíti a sémakezelést. |
| Configuration | Kapcsolati sztringek és titkos kulcsok kiszervezése. | Jobb környezeti izoláció. |
| Tesztelés | Használja az InMemory szolgáltatót az egységtesztekhez. | Gyorsabb tesztfuttatások. |
| Fakitermelés | Engedélyezze az EF-naplózást a teljesítményinformációkhoz. | Könnyebb hibakeresés. |
Ezek a gyakorlatok biztosítják robusztus, skálázható és karbantartható Entity Frameworkre épülő alkalmazások.
41) Hogyan optimalizálhatók a LINQ lekérdezések a jobb SQL fordítás érdekében az Entity Frameworkben?
Az Entity Framework automatikusan SQL-lé konvertálja a LINQ lekérdezéseket, de a nem hatékony minták lassú vagy redundáns SQL-t eredményezhetnek. A LINQ optimalizálása biztosítja, hogy az ORM hatékony adatbázis-lekérdezéseket generáljon.
Optimalizálási technikák:
Vetítések használata:
- Csak a szükséges oszlopokat jelölje ki a teljes entitások helyett.
- Kerülje az ügyféloldali értékelést:
Mindig ügyeljen a szűrésre SQL-ben, nem a memóriában. Az EF Core figyelmeztet, ha a kiértékelés kliensoldali. - Felhasználás
AsNoTracking()csak olvasható adatokhoz. - Használja ki a lefordított lekérdezéseket ismételt LINQ műveletekhez.
- Kerülje a feleslegeseket
.Include()hívások – csak akkor adjon meg kapcsolódó adatokat, ha szükséges.
var customers = context.Customers
.Select(c => new { c.Id, c.Name })
.ToList();
var orders = context.Orders.AsNoTracking().ToList();
Példa:
Hatástalan:
context.Customers.ToList().Where(c => c.IsActive);
Hatékony:
context.Customers.Where(c => c.IsActive).ToList();
42) Milyen különböző módokon lehet a kezdeti adatokat az EF Core-ban seedelni?
Az adatvetés biztosítja, hogy az adatbázis rendelkezzen alapértelmezett vagy referenciaadatok amikor létrejött.
1. megközelítés: A ModelBuilder használata
modelBuilder.Entity<Role>().HasData(
new Role { Id = 1, Name = "Admin" },
new Role { Id = 2, Name = "User" }
);
Ez automatikusan beszúrja az adatokat a folyamat során. Update-Database.
2. megközelítés: Egyéni vetőmag módszer
Kód manuális végrehajtása indításkor:
context.Database.Migrate();
if (!context.Users.Any())
{
context.Users.Add(new User { Name = "Admin" });
context.SaveChanges();
}
3. megközelítés: SQL szkriptek
Nyers SQL használata migrációkban:
migrationBuilder.Sql("INSERT INTO Roles (Name) VALUES ('Admin')");
Ajánlás:
Felhasználás HasData() statikus referenciaadatokhoz és programozott seedinghez dinamikus indítási adatokhoz.
43) Hogyan kezeli az EF Core belsőleg az adatbázis-szolgáltatókat?
EF mag szolgáltatófüggetlen, ami azt jelenti, hogy több adatbázismotort is megcélozhat különálló adatbázis-szolgáltatói csomagok.
Gyakori szolgáltatók:
| Provider | NuGet Csomag | adatbázis |
|---|---|---|
| SQL Server | Microsoft.EntityFrameworkCore.SqlServer |
MSSQL |
| SQLite | Microsoft.EntityFrameworkCore.Sqlite |
Mobil/asztali számítógép |
| PostgreSQL | Npgsql.EntityFrameworkCore.PostgreSQL |
PostgreSQL |
| MySQL | Pomelo.EntityFrameworkCore.MySql |
MySQL |
| Cosmos DB | Microsoft.EntityFrameworkCore.Cosmos |
NoSQL |
Az EF Core belsőleg a következőket használja: abstracrétegek szempontjainak:
- Lekérdezés fordítása
- SQL parancs generálása
- Adattípus-térképping
Minden szolgáltató saját osztályokat valósít meg, amelyek az EF Core alap absz. függvényeiből öröklődnek.tracciók (pl. RelationalDatabaseProvider, QuerySqlGenerator).
44) Mi az a „osztott lekérdezés”, és mikor kell használni?
A felosztott lekérdezések megakadályozzák az EF végrehajtását nagy, összetett illesztések több SQL lekérdezés végrehajtásával egy helyett.
Példa:
var customers = context.Customers
.Include(c => c.Orders)
.AsSplitQuery()
.ToList();
Ez végrehajtja:
- 1. lekérdezés → Ügyfelek szerzése
- 2. lekérdezés → Az adott ügyfelekhez kapcsolódó rendelések lekérése
Előnyök:
- Megakadályozza a nagy derékszögű szorzatokat.
- Javítja a teljesítményt nagyméretű, kapcsolódó adathalmazok esetén.
Hátrány:
Többszörös oda-vissza út az adatbázishoz.
Felhasználás lekérdezések felosztása amikor nagyméretű, kapcsolódó adatok betöltésekor memóriaproblémákat okozhat.
45) Hogyan lehet hatékonyan monitorozni az EF által generált SQL parancsokat?
Az SQL monitorozása segít a lassú lekérdezések hibakeresésében és az ORM viselkedésének optimalizálásában.
SQL naplózási módszerek:
- Konzolos naplózás
- ILoggerFactory integráció
- Elfogók végrehajtja
DbCommandInterceptorparancsok és időzítések rögzítésére. - Profilozó eszközök Használjon olyan eszközöket, mint:
- MiniProfiler
- SQL Server Profiler
- EFCorePowerTools
optionsBuilder
.UseSqlServer(conn)
.LogTo(Console.WriteLine, LogLevel.Information);
var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole()); optionsBuilder.UseLoggerFactory(loggerFactory);
A naplózásnak szelektíven engedélyezve a termelésben a teljesítménybeli többletterhelés elkerülése érdekében.
46) Mi a különbség a változás és a változás között?Tracker.DetectChanges() és AutoDetectChangesEnabled?
| Jellemző | DetectChanges() |
AutoDetectChangesEnabled |
|---|---|---|
| típus | Módszer | Ingatlanok |
| Cél | Kényszeríti az EF-et a szkennelésre tracazonosító entitások és változások észlelése | Engedélyezi/letiltja az automatikus változásészlelést |
| alapértelmezett | Kézikönyv | Igaz |
| Használat | Kifejezetten felszólít a teljesítményoptimalizálásra | Tömeges frissítések letiltása |
Példa:
context.ChangeTracker.AutoDetectChangesEnabled = false;
foreach (var item in list)
{
context.Add(item);
}
context.SaveChanges();
A ciklusok automatikus észlelésének letiltása akár a teljesítmény javulását is eredményezheti. 40% tömeges műveletekben.
47) Hogyan használhatom az időbeli táblázatokat az EF Core-ral?
Az ideiglenes táblák (az SQL Server 2016-ban bevezetettek) lehetővé teszik a következőket: track történelmi adatok automatikusan.
Lépések:
- Időbeli támogatás engedélyezése a migráció során:
- Lekérdezési előzményadatok:
builder.Entity<Employee>()
.ToTable("Employees", b => b.IsTemporal());
var history = context.Employees
.TemporalAsOf(DateTime.UtcNow.AddDays(-7))
.ToList();
Előnyök:
- Beépített adatelőzmények trackirály
- Auditálás és megfelelés
- Nincs szükség kézi indítókra
Az EF Core 6+ teljes körű időbeli lekérdezést támogat.
48) Hogyan támogatja az EF Core a lefordított lekérdezéseket és az előre generált modelleket együttesen?
A fordított lekérdezések és a fordított modellek kétféleképpen értelmezhetők. teljesítmény jellemzők amelyek kiegészítik egymást.
| Jellemző | Cél |
|---|---|
| Lefordított lekérdezések | Gyorsítótár lekérdezés fordítási eredményei |
| Összeállított modellek | Előfordított modell metaadatai |
Példa a fordított lekérdezésre:
static readonly Func<AppDbContext, int, Customer> _getCustomerById =
EF.CompileQuery((AppDbContext ctx, int id) =>
ctx.Customers.FirstOrDefault(c => c.Id == id));
Használat:
var customer = _getCustomerById(context, 5);
Együtt: Az összeállított modellek csökkentik indulási költség, míg a lefordított lekérdezések csökkentik futásidejű lekérdezési többletterhelés - ideális nagy gyakoriságú lekérdezések.
49) Milyen gyakori buktatók vannak az EF mikroszolgáltatás-architektúrában történő használatakor?
Gyakori hibák:
- Megosztott DbContext szolgáltatások között
→ Megsérti a mikroszolgáltatás-elkülönítést.
→ Minden mikroszolgáltatásnak saját DbContext-tel és sémával kell rendelkeznie. - Csevegős kommunikáció (N+1 lekérdezés)
→ Minimalizálja az EF lekérdezések számát API-hívásonként. - Túlzottan buzgó rakodás
→ Csak a szükséges adatokat töltse be DTO-kon keresztül. - Központosított migrációk
→ Minden szolgáltatásnak függetlenül kell kezelnie a saját migrációit. - Tranzakciós határok hiánya
→ Elosztott tranzakciókat (Kimenő üzenetek minta) használjon, ha szolgáltatások közötti konzisztencia szükséges. - Szoros csatolás az SQL-szolgáltatóhoz
→ Használja a repository abs-ttracrugalmasság megőrzése az adatbázis-választásban.
50) Hogyan integrálódik a függőségbefecskendezés a DbContext-tel az ASP.NET Core-ban?
Az Entity Framework zökkenőmentesen integrálható a következőkkel: Az ASP.NET Core beépített függőség-befecskendezése (DI) rendszer.
Beállítás:
services.AddDbContext<AppDbContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("Default")));
Ezután fecskendezze be vezérlőkbe vagy szolgáltatásokba:
public class CustomerService
{
private readonly AppDbContext _context;
public CustomerService(AppDbContext context)
{
_context = context;
}
}
Élettartamok:
| Élettartam | Leírás | Ajánlott |
|---|---|---|
| hatókörrel | Egy kontextus HTTP kérésenként | alapértelmezett |
| múló | Minden alkalommal új példány | Háttérmunkák |
| Szingli | Globálisan megosztva | Kerüld (nem szálbiztos) |
A DI használata biztosítja tesztelhetőség, életciklus-menedzsmentés erőforrás-hatékonyság webes és háttérfolyamatokon keresztül.
🔍 Legfontosabb Entity Framework interjúkérdések valós forgatókönyvekkel és stratégiai válaszokkal
1) Mi az Entity Framework, és miért használják vállalati alkalmazásokban?
Elvárások a jelölttől: Az interjúztató fel szeretné mérni az Entity Framework alapvető ismereteit és annak valós alkalmazásokban betöltött szerepét.
Példa válaszra: Az Entity Framework egy objektum-relációs térképping Egy .NET keretrendszer, amely lehetővé teszi a fejlesztők számára, hogy nyers SQL helyett .NET objektumokat használjanak az adatbázisokkal való munkához. Vállalati alkalmazásokban használják a termelékenység javítására, a sablonos adathozzáférési kód csökkentésére és a feladatok szigorú elkülönítésének fenntartására.
2) El tudnád magyarázni a különbséget a következők között? Code Először is, az Adatbázis Első és a Modell Első megközelítések?
Elvárások a jelölttől: Az interjúztató fel szeretné mérni a különböző fejlesztési munkafolyamatokkal kapcsolatos ismereteidet, és azt, hogy mikor érdemes azokat használni.
Példa válaszra: Code A First a domain osztályokkal kezdi, és kódból generálja az adatbázist. A Database First egy meglévő adatbázissal kezdi, és entitás osztályokat generál. A Model First egy vizuális tervezőt használ a modell meghatározásához, majd létrehozza a kódot és az adatbázist. Minden megközelítést a projekt követelményei és a meglévő infrastruktúra alapján választanak ki.
3) Hogyan kezeli az Entity Framework a táblák közötti kapcsolatokat?
Elvárások a jelölttől: Az interjúztató az adatmodellezés és a relációs térkép ismereteit ellenőrzi.ping.
Példa válaszra: Az Entity Framework navigációs tulajdonságok és idegen kulcsok segítségével kezeli a kapcsolatokat. Támogatja az egy-az-egyhez, egy-a-sokhoz és sok-a-sokhoz kapcsolatokat, lehetővé téve a fejlesztők számára, hogy az összefüggő adatokat objektumhivatkozások segítségével, ne pedig illesztésekkel (join) haladják be.
4) Írjon le egy olyan helyzetet, amelyben az Entity Framework használatával javította az adatbázis teljesítményét.
Elvárások a jelölttől: A kérdező egy gyakorlati példát szeretne hallani az optimalizálási készségek bemutatására.
Példa válaszra: Előző munkakörömben a teljesítmény javítását szolgálta a felesleges, gyors betöltések csökkentése és a Select utasításokkal történő vetítési lekérdezések megvalósítása. Ez minimalizálta az adatbázisból kinyert adatok mennyiségét, és jelentősen csökkentette a lekérdezések végrehajtási idejét.
5) Hogyan kezeled a migrációkat az Entity Frameworkben?
Elvárások a jelölttől: Az interjúztató a sémamódosításokkal és a verziókövetéssel kapcsolatos tapasztalataidat értékeli.
Példa válaszra: A migrációkat a beépített migrációs eszközökkel kezelik, amelyek tracA k modell idővel változik. Egy korábbi pozíciómban rendszeresen generáltam és ellenőriztem migrációs szkripteket alkalmazásuk előtt, hogy biztosítsam az adatbázis integritását a különböző környezetekben.
6) Mi a lusta betöltés, és mikor kerülnéd a használatát?
Elvárások a jelölttől: Az interjúztató tesztelni szeretné, hogy mennyire értesz az adatbetöltési stratégiákhoz és a teljesítménybeli kompromisszumokhoz.
Példa válaszra: A lusta betöltés automatikusan betölti a kapcsolódó adatokat, amikor azokhoz hozzáférünk. Kerülném a használatát teljesítménykritikus esetekben vagy API-kban, mert több nem kívánt adatbázis-hívást okozhat, ami az N+1 lekérdezési problémához vezethet.
7) Hogyan kezeled a tranzakciókat az Entity Frameworkben?
Elvárások a jelölttől: Az interjúztató az adatkonzisztenciával és a hibakezeléssel kapcsolatos ismereteidet értékeli.
Példa válaszra: Az Entity Framework a DbContext és a TransactionScope segítségével támogatja a tranzakciókat. Az előző munkahelyemen explicit tranzakciókat használtam annak biztosítására, hogy több kapcsolódó adatbázis-művelet sikeresen együtt fejeződjön be, vagy hiba esetén visszavonásra kerüljön.
8) Magyarázza el, hogyan használják a függőségbefecskendezést az Entity Frameworkben.
Elvárások a jelölttől: Az interjúztató kíváncsi arra, hogy mennyire érted a modern alkalmazásarchitektúrát.
Példa válaszra: A függőségbefecskendezést a DbContext szolgáltatásokba vagy vezérlőkbe történő befecskendezésére használják. Ez javítja a tesztelhetőséget és a karbantarthatóságot azáltal, hogy lehetővé teszi a kontextus modellezését vagy cseréjét az üzleti logika megváltoztatása nélkül.
9) Írj le egy kihívást jelentő hibát, amellyel az Entity Frameworkkel kapcsolatban találkoztál, és azt, hogyan oldottad meg.
Elvárások a jelölttől: Az interjúztató a problémamegoldó képességet és a hibakeresési készségeket keresi.
Példa válaszra: Az előző szerepemben egy problémába ütköztem tracKing ütközik a leválasztott entitások frissítésekor. Ezt úgy oldottam meg, hogy explicit módon beállítottam az entitásállapotokat, és biztosítottam, hogy minden entitásból csak egy példány legyen. traca kontextus alapján.
10) Hogyan döntöd el, hogy az Entity Framework nem a megfelelő eszköz?
Elvárások a jelölttől: Az interjúztató szeretné megérteni az ítélőképességedet és a megfelelő technológiák kiválasztására való képességedet.
Példa válaszra: Alternatív megoldásokat fontolok meg, amikor az alkalmazások rendkívül nagy teljesítményű adathozzáférést vagy összetett tárolt eljáráslogikát igényelnek. Ilyen esetekben egy mikro-ORM vagy nyers ADO.NET használata nagyobb kontrollt és hatékonyságot biztosíthat.

