50 nejčastějších otázek a odpovědí na pohovoru o Entity Framework (2026)

Nejčastější otázky a odpovědi na pohovoru o Entity Frameworku

Příprava na pohovor s Entity Framework znamená předvídat otázky, které odhalí skutečné schopnosti. Otázky na pohovoru s Entity Framework odhalují myšlení, povědomí o výkonu a to, jak kandidáti převádějí koncepty do praxe.

Zvládnutí Entity Frameworku otevírá pozice v moderním vývoji, od platforem založených na datech až po cloudové služby. Praktická zkušenost buduje analytické schopnosti, posiluje technické znalosti a podporuje týmy. Náboroví lídři si cení praktického řešení problémů, škálovatelného designu, mentorování juniorů a rozvojových cest pro čerstvé absolventy.
Přečtěte si více ...

👉 Stažení PDF zdarma: Otázky a odpovědi k pohovoru o Entity Framework

Nejčastější otázky a odpovědi na pohovoru o Entity Frameworku

1) Co je Entity Framework a k čemu se používá?

Entity Framework (EF) je MicrosoftORM (Objektově-relační mapa)ping) framework pro .NET, který zjednodušuje interakci s databází tím, že umožňuje vývojářům pracovat s daty jako se silně typovanými objekty .NET namísto surového SQL.Toto břišní svalytracTechnologie umožňuje vývojářům provádět operace CRUD (vytváření, čtení, aktualizace, odstranění) pomocí známých konstrukcí C# a framework tyto operace převádí do optimalizovaných SQL dotazů „v podpoře“. EF snižuje počet standardního kódu pro přístup k datům, zlepšuje udržovatelnost a pomáhá vynucovat bezpečnost typů při kompilaci.

Například místo psaní SQL můžete použít:

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

EF přeloží tento LINQ dotaz do SQL, provede ho v databázi a vrátí výsledky jako objekty.


2) Vysvětlete rozdíl mezi Code Za prvé, přístupy Database First a Model First.

Entity Framework podporuje tři hlavní vývojové přístupy:

Přístup Kdy použít Co se stalo
Code Jméno Nové projekty nebo návrh zaměřený na doménu Definujete třídy entit. EF generuje schéma databáze z kódu.
Nejprve databáze Existující databáze EF generuje třídy entit a kontext z existujícího schématu.
Model First Když dáváte přednost vizuálnímu designu Model navrhujete ve vizuálním návrháři (Entity Designer) a EF generuje jak třídy, tak databázi.

Každý přístup slouží různým scénářům: Code Jméno je populární v agilním vývoji, Nejprve databáze je preferován u starších databází a Model First hodí se pro případy, kdy je důležité vizuální modelování.


3) Co je DbContext a jakou roli hraje v EF?

DbContext je primární třída, která spravuje relace s databází, traczměny entity ks a koordinuje ukládání dat zpět do databáze. Představuje most mezi vaší C# aplikací a databází. Prostřednictvím DbContext, definujete DbSet<TEntity> vlastnosti, které představují kolekce entit a mapují se na tabulky v databázi.

Příklad:

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

Zde, Products funguje jako kolekce pro provádění operací CRUD. EF používá tento kontext k track stavů objektů a generovat SQL příkazy na SaveChanges().


4) Co jsou migrace v Entity Frameworku a jak se používají?

Migrace jsou mechanismem pro track a aplikovat změny schématu do databáze v průběhu času. Jak se váš model vyvíjí, migrace pomáhají udržovat databázi synchronizovanou bez nutnosti ruční úpravy SQL skriptů. S Code Nejprve použijete příkazy jako:

Add-Migration InitialCreate
Update-Database

Tím se generují migrační třídy, které definují změny schématu a aplikují je na databázi. Migrace umožňují správu verzí schématu databáze a usnadňují spolupráci na vývoji.


5) Popište líné načítání, rychlé načítání a explicitní načítání.

Efektivní načítání souvisejících dat je v EF klíčové. Zde je srovnání:

Strategie Když to běží Typické použití
Lazy Loading Související data načtena při prvním přístupu Použijte, když související data nemusí být vždy potřeba.
Dychtivé načítání Související data načtená předem prostřednictvím .Include() Použijte, když víte, že potřebujete související data.
Explicitní načítání Ručně načteno po dotazu Umožňuje přesně určit, kdy se načítají související data.

Například:

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

Pomalé načítání pomáhá snížit počet počátečních dotazů, ale může způsobit N+1 problémů s dotazy pokud se nepoužívá opatrně.


6) Co je to změna trackrál v Entity Frameworku?

Přeměna tracKing je interní mechanismus EF, který monitorování změn stavu entity po provedení dotazu. Když je entita načtena pomocí DbContext, to je tracked. Jakékoli změny jeho vlastností jsou zaznamenány a pokud SaveChanges() je volána, EF vygeneruje příslušný SQL kód. INSERT, UPDATEnebo DELETE příkazy. Pro scénáře pouze pro čtení, kde trackrál je zbytečný, AsNoTracking() zlepšuje výkon zakázáním změn trackrál.


7) Jak Entity Framework řeší konflikty souběžnosti?

Řízení souběžnosti zajišťuje, že více uživatelů aktualizujících stejná data neúmyslně nepřepíše změny ostatních. EF používá optimistická souběžnost ve výchozím nastavení. Běžný přístup zahrnuje přidání token souběžnosti (jako RowVersion časové razítko). EF kontroluje tento token během SaveChanges()a pokud se liší od verze databáze, DbUpdateConcurrencyException je vyvolána chyba, která indikuje konflikt. Vývojáři pak mohou tuto výjimku zpracovat a pokusit se zopakovat nebo vyřešit rozdíly v datech.


8) Co jsou navigační vlastnosti v EF?

Navigační vlastnosti definují vztahy mezi entitami. Umožňují EF navigace asociacemi (např. jedna k mnoha) bez ručního spojení:

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

Zde, Customer je navigační vlastnost propojující Order k jeho souvisejícímu CustomerEF používá tyto vlastnosti k automatickému vytváření vztahů a spojení během dotazů. Navigační vlastnosti fungují společně. cizí klíče modelovat vztahy.


9) Jaký je účel AsNo?Trackrál()?

AsNoTracking() zakáže změnu trackrál pro dotaz, což je prospěšné pro pouze pro čtení operace, u kterých nemáte v úmyslu aktualizovat načtené entity. To zlepšuje výkon snížením využití paměti a tracrežie king. To je obzvláště užitečné při načítání velkých datových sad bez jejich úpravy.


10) Co jsou kompilované dotazy a kdy byste je měli použít?

Kompilované dotazy jsou technikou optimalizace výkonu. Když je spuštěn dotaz LINQ, EF jej obvykle pokaždé přeloží do SQL. U kompilovaných dotazů se tento překlad provede jednou a výsledný delegát se znovu použije – čímž se sníží režijní náklady u často spouštěných nebo složitých dotazů. Používejte je v s velkým provozem scénáře, kdy se stejný dotaz opakovaně spouští s různými parametry.


11) Co jsou stavy entit v Entity Frameworku a jak ovlivňují SaveChanges()?

Rámec entit tracks každé entity stát určit, jakou databázovou operaci provést během SaveChanges()Hlavními státy entit jsou:

Stát Description OperaSpuštěno
Přidáno Nová entita k vložení INSERT
Modifikovaný Stávající entita aktualizována UPDATE
Vypouští Entita označená k odstranění DELETE
Beze změny Žádné změny nebyly zjištěny Nevyplněno
oddělený Ne tracovlivněno kontextem Nevyplněno

Když zavoláte SaveChanges(), EF kontroluje stavy entit a provádí odpovídající SQL příkazy. Například nová entita přidaná do DbSet budou označeny Přidáno, což má za následek INSERT dotaz.

Příklad:

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

Tím se explicitně aktualizuje záznam databáze pro danou entitu.

Pochopení států zajišťuje lepší kontrolu nad synchronizací dat a výkonem.


12) Jaké jsou výhody a nevýhody používání Entity Frameworku?

Entity Framework nabízí značné výhody, ale také určité nevýhody, v závislosti na vašem případu použití.

Výhody Nevýhody
Zjednodušuje přístup k datům prostřednictvím LINQ a objektových modelů. Nároky na výkon ve srovnání se surovým ADO.NET.
Snižuje počet standardního SQL kódu. Složité dotazy mohou generovat neefektivní SQL.
Podporuje více poskytovatelů databází. Obtížnější ladění generovaných SQL příkazů.
Silně typovaný, což zlepšuje bezpečnost při kompilaci. Možné migrační konflikty ve velkých týmech.
Umožňuje rychlé prototypováníping s Code První. Less kontrola nad jemně doladěnými dotazy.

U rozsáhlých systémů vyžadujících maximální výkon mohou vývojáři stále kombinovat surový SQL s EF pro optimalizaci.


13) Jak Entity Framework zpracovává vztahy (jeden k jednomu, jeden k mnoha, mnoho k mnoha)?

Entity Framework spravuje vztahy prostřednictvím vlastnosti navigace a Asociace cizích klíčů.

Typy vztahů jsou:

Typ vztahu Description Příklad
Jeden na jednoho Každá instance entity má jednu související entitu. UserUserProfile
One-to-Many Jedna entita se vztahuje k více dalším. CustomerOrders
Mnoho k mnoha Více entit spolu souvisí. StudentCourse

Příklad One-to-Many vztah:

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

EF automaticky generuje cizí klíče a popisovače pravidla kaskádového mazání v závislosti na konfiguraci.

Můžete také použít Plynulé API pro explicitnější mapu vztahůping.


14) Jaký je rozdíl mezi LINQ to Entities a LINQ to SQL?

vlastnost LINQ k entitám LINQ to SQL
Podporované databáze Vícenásobné (SQL Server, Oracle, MySQLAtd.). Pouze SQL Server
Základní rámec Rámec entit ADO.NET
Model Model koncepční entity Pouze databázové tabulky
Mapaping Komplexní mapaping (dědičnost, asociace) Mapa stolů s přímým přístupemping
Budoucí podpora Aktivně podporováno Zastaralé

LINQ k entitám je součástí Entity Frameworku a je všestrannější, zatímco LINQ to SQL je omezen na SQL Server a jednodušší případy použití.

Proto se pro vývoj na podnikové úrovni doporučuje LINQ to Entities.


15) Jaký je rozdíl mezi ObjectContext a DbContext?

vlastnost KontextObjectContext DbContext
Rámec Starší verze EF Zjednodušené API v EF 4.1+
Komplexita Podrobnější Lehké a snadné
Výkon O něco rychlejší, ale hůře použitelný Zjednodušené s minimálními režijními náklady
Přeměna Trackrál Nutná ruční konfigurace Automatický trackrál
Preferované použití Starší systémy Moderní projekty EF / EF Core

DbContext vnitřní obaly ObjectContext ale poskytuje čistší a intuitivnější API. Většina současných .NET aplikací by měla používat DbContext.


16) Vysvětlete životní cyklus entity v Entity Frameworku.

Životní cyklus entity popisuje její přechody stavu od vzniku k vytrvalosti:

  1. Tvorba – Entita je instancována v paměti (stav: oddělený).
  2. Připevnění – Přidáno do kontextu prostřednictvím DbSet.Add() (stát: Přidáno).
  3. Změna – Změny detekovány automaticky (stav: Modifikovaný).
  4. Perzistence - SaveChanges() volané → provedené SQL příkazy.
  5. vymazání – Entita označená jako Vypouští a odstraněny z databáze.

Pochopení tohoto životního cyklu pomáhá při ladění problémů s daty a optimalizaci správy kontextu EF.


17) K čemu se používá Fluent API v Entity Frameworku?

Jedno Plynulé API poskytuje programový způsob konfigurace vztahů, omezení a mapování modelupings, často používané v OnModelCreating() metoda vaší DbContext.

Poskytuje jemnou kontrolu nad konfiguracemi, které anotace dat nemůže vyjádřit.

Příklad:

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

Fluent API je obzvláště výkonné pro konfiguraci kompozitní klíče, relace mnoho-k-mnoha, a kaskádová pravidla.


18) Co jsou datové anotace v Entity Frameworku?

Anotace dat jsou atributy aplikují se přímo na třídy nebo vlastnosti modelu k definování chování schématu. Jsou jednodušší než Fluent API, ale méně flexibilní.

Příklad:

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

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

Anotace definují klíče, délky řetězců, povinná pole a vztahy. V pokročilých případech vývojáři obvykle kombinují Anotace dat a Plynulé API.


19) Jaký je mezi tím rozdíl tracked a untracKódované entity v EF Core?

Typ Description Použijte pouzdro
Tracked Entity Monitorováno DbContext pro změny. Výchozí chování pro aktualizace.
Untracked Entity Nemonitorováno; načteno pomocí .AsNoTracking(). Ideální pro operace pouze pro čtení.

TracEntity KED spotřebovávají více paměti, ale umožňují EF automaticky detekovat změny.

Untracvylepšení entit výkon ve scénářích s vysokým počtem čtení a nízkým počtem aktualizací.


20) Jak lze v Entity Frameworku spouštět nezpracované SQL dotazy?

Entity Framework umožňuje spouštění nezpracovaného SQL pro vlastní nebo výkonnostně kritické dotazy.

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

Pro příkazy, které nejsou dotazy:

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

Tuto funkci používejte opatrně, abyste se vyhnuli SQL injection a zachovat flexibilitu nezávislou na databázi.


21) Jaký je rozdíl mezi Entity Framework a Entity Framework Core?

Entity Framework (EF) a Entity Framework Core (EF Core) se liší architekturou, možnostmi a podporou napříč platformami.

vlastnost Entity Framework 6 (EF6) Jádro Entity Framework
Plošina Pouze .NET Framework Multiplatformní (.NET 5/6/7)
Architecture Na základě ObjectContextu Lehký a modulární
Výkon Pomalejší v některých dotazech Optimalizované generování dotazů
Podpora LINQ Zralé, ale omezené Vylepšený překlad a asynchronní
Poskytovatelé databází SQL Server, Oracle Vícenásobné (MySQL, PostgreSQL, SQLiteAtd.).
Funkce Zralé (např. líné načítání) Moderní (např. vlastnosti stínů, globální filtry)

EF Core je moderní, aktivně rozvíjený verze a doporučená volba pro nové .NET projekty díky své flexibilitě a výkonu.


22) Jak fungují transakce v Entity Frameworku?

Transakce v Entity Framework zajišťují integrity dat když více operací musí být úspěšné nebo selhat společně. Ve výchozím nastavení EF zalamuje SaveChanges() uvnitř transakce. Pro ruční ovládání:

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

Tím je zajištěna atomicita – pokud jakýkoli příkaz selže, všechny změny se vrátí zpět.

EF se také integruje s Systémové transakce pro podporu distribuovaných transakcí.


23) Vysvětlete strategie dědičnosti TPH, TPT a TPC v Entity Frameworku.

Entity Framework podporuje tři hlavní mapy dědičnosti.ping strategie pro modelování hierarchií tříd.

Strategie Description Příklad Výhody Nevýhody
TPH (Tabulka na hierarchii) Všechny třídy sdílejí jednu tabulku; sloupec diskriminátoru identifikuje typ. Běžné v EF Core. Jednoduché a rychlé dotazy. Tabulka může být velká a řídká.
TPT (tabulka podle typu) Každá podtřída má svou vlastní tabulku. Každá odvozená třída se mapuje samostatně. Normalizované schéma. Pomalejší spojení ve velkých hierarchiích.
TPC (tabulka pro jednotlivé třídy betonu) Každá třída má svou vlastní tabulku s duplicitními sloupci. Každá entita mapována samostatně. Vysoce výkonné čtení. Redundance dat.

Většina vývojářů preferuje TPH pro jeho jednoduchost, pokud normalizace nebo požadavky na výkon nediktují jinak.


24) Jak řešíte ladění výkonu v Entity Frameworku?

Optimalizace výkonu Entity Framework:

  1. Použijte AsNoTracking() pro dotazy pouze pro čtení.
  2. Dychtivá zátěž pouze nezbytné související entity s .Include().
  3. Vyhněte se dotazům N+1 pomocí projekcí nebo Select().
  4. Použití kompilovaných dotazů pro často prováděné operace.
  5. Dávkové vkládání/aktualizace více kusů s AddRange() a SaveChanges().
  6. Zakázat automatické zjišťování změn pro hromadné operace: context.Configuration.AutoDetectChangesEnabled = false;
  7. Používejte ukládání do mezipaměti a stránkování pro velké datové sady.

Dobře vyladěná implementace EF se může přiblížit výkonu ADO.NET a zároveň zachovat produktivitu vývojářů.


25) Co je to vlastnost shadow v Entity Framework Core?

A stínová vlastnost existuje v modelu EF, ale ne ve třídě entit. Je udržován EF při změně tracker a uloženy v databázi.

Příklad:

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

To umožňuje EF ukládat další metadata (např. časová razítka, informace o auditu) bez úpravy třídy entity.

K vlastnostem stínu se dostanete pomocí:

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

Stínové vlastnosti jsou ideální pro scénáře protokolování nebo auditu.


26) Co jsou to převodníky hodnot v EF Core?

Převodníky hodnot v EF Core umožňují transformaci hodnot vlastností při čtení z databáze nebo zápisu do ní.

Například pro uložení výčtu jako řetězce:

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

To zvyšuje flexibilitu pro vlastní datové typy, jako například enum, boolnebo DateTimeOffset.

Převodníky hodnot se používají také pro šifrování, komprese nebo maskování citlivých údajů.


27) Co jsou globální filtry dotazů a jak fungují?

Globální filtry dotazů umožňují automatické použití podmínek na všechny dotazy pro danou entitu.

To je užitečné zejména pro měkké mazání or vícenájem.

Příklad:

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

Každý dotaz provedený proti Employee automaticky vyloučí záznamy smazané po obnovení, pokud nejsou explicitně přepsány.

Globální filtry zlepšují údržbu a zabezpečení dat.


28) Jak lze testovat kód Entity Frameworku pomocí jednotkových testů?

Pro jednotkové testování logiky EF bez nutnosti narazit na skutečnou databázi použijte databáze v paměti or uštěpačný:

  • Možnost 1: Poskytovatel InMemory
    var options = new DbContextOptionsBuilder<AppDbContext>()
        .UseInMemoryDatabase("TestDb")
        .Options;
    
  • Možnost 2: Simulace kontextu databáze
    Falešný DbSet pomocí knihoven jako MOQ pro izolované testování.

Jednotkové testy by měly ověřit:

  • Správnost dotazu (prostřednictvím LINQ)
  • Konzistence dat po SaveChanges()
  • Logika repozitáře

Testování s EF Core InMemory zajišťuje rychlost a zabraňuje závislostem na SQL Serveru.


29) Vysvětlete vzory Repository a Unit of Work v EF.

Tyto dva architektonické vzory pomáhají abstracpřístup k datům a zachovat transakční konzistenci.

Vzor Účel Příklad implementace
sklad Zapouzdřuje operace CRUD pro každou entitu. IRepository<T> rozhraní s Add(), GetAll(), Etc.
Jednotka práce Koordinuje více repozitářů v rámci jedné transakce. SaveChanges() funguje jako hranice commitu.

Příklad:

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

Tyto vzorce se zlepšují testovatelnost, opětovné použití kódu, a oddělení obav ve velkých podnikových aplikacích.


30) Jaký je rozdíl mezi dychtivým načítáním a projekčním načítáním?

Vzhled Dychtivé načítání Načítání projekce
Účel Načte související data předem Načte pouze specifická pole nebo vlastnosti
Metoda .Include() .Select()
Příklad context.Orders.Include(o => o.Customer) context.Orders.Select(o => new { o.Id, o.Customer.Name })
Výkon Načte celé objekty Načítá minimální data
Použijte pouzdro Kdy jsou pro zpracování potřeba související entity Když potřebujete specifická lehká data

Projekční zatížení je optimalizace výkonu což snižuje paměťovou režii výběrem pouze nezbytných sloupců.


31) Co jsou interceptory v Entity Framework Core?

Interceptory v EF Core umožňují vývojářům zachycovat a upravovat databázové operace, jako například provádění dotazů, vytváření příkazů a otevírání připojení.

Fungují jako middleware komponenty mezi EF a poskytovatelem databáze.

Příklad: Záznam všech provedených SQL příkazů.

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

Zaregistrujete si to v DbContextOptionsBuilder:

optionsBuilder.AddInterceptors(new CommandInterceptor());

Výhody:

  • Vylepšené protokolování
  • Zabezpečení (validace dotazů)
  • Audit a výkonnost trackrál

32) Jak EF Core zpracovává asynchronní operace?

Entity Framework Core plně podporuje asynchronní programování prostřednictvím metod, jako je SaveChangesAsync(), ToListAsync(), a FirstOrDefaultAsync().

Asynchronní provádění pomáhá zlepšit škálovatelnost ve webových aplikacích uvolňováním vláken během čekání na databázové operace vázané na I/O.

Příklad:

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

Asynchronní operace jsou obzvláště efektivní při vysoké propustnosti. ASP.NET Core API a mikroslužby, čímž se snižuje počet blokujících hovorů a zkracují doby odezvy.


33) Co je odolnost připojení v Entity Framework Core?

Odolnost připojení pomáhá vaší aplikaci automaticky se zotavit z dočasných selhání databáze, například přerušení sítě nebo vypršení časového limitu SQL.

Lze jej nakonfigurovat následovně:

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

V tomto případě EF zopakuje neúspěšné operace až 5krát se zpožděním.

To je obzvláště užitečné v cloudově hostovaná prostředí jako Azure SQL, kde jsou běžné přechodné chyby.


34) Jaké jsou typy vlastněných entit v EF Core?

Vlastněné entity umožňují modelování hodnotové objekty které zcela závisí na životním cyklu jiné entity.

Sdílejí stejnou tabulku jako jejich majitel a nemohou existovat samostatně.

Příklad:

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

Konfigurace:

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

Případ použití:

Modelování konceptů jako Adresa, Penízenebo a) Měření dodržování pokynů které nemají žádnou vlastní identitu.


35) Jak lze implementovat soft delete v Entity Framework Core?

Obnovovací odstranění označí záznamy jako odstraněné, místo aby je fyzicky odstranilo.

Jsou implementovány pomocí booleovský příznak a globální filtry dotazů.

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

V operaci odstranění:

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

Výhody:

  • Uchovávání historických dat
  • Snadnější zotavení

Nevýhody:

  • Větší databázové tabulky
  • Vyžaduje pečlivou logiku filtrování

36) Co je kompilovaný model v EF Core a k čemu se používá?

V EF Core 6+, kompilované modely umožňují předkompilaci metadat modelu EF do sestavení .NET, což snižuje dobu spouštění a režijní náklady za běhu.

Kroky:

  1. Spusťte příkaz: dotnet ef dbcontext optimize
  2. EF generuje předkompilovaný soubor modelu, který aplikace načte rychleji za běhu.

Výhoda: Snižuje latenci inicializace o 30–40 %, zejména u velkých aplikací s mnoha entitami.

Případ použití: Vysoce výkonné mikroslužby a bezserverová prostředí.


37) Jak lze implementovat ukládání do mezipaměti v Entity Frameworku?

Ukládání do mezipaměti pomáhá omezit opakované dotazy do databáze. Existují dvě hlavní úrovně:

Typ Description Příklad
Mezipaměť první úrovně Vestavěné, na DbContext instance Automaticky spravováno
Mezipaměť druhé úrovně Externí mezipaměť sdílená napříč kontexty Používejte knihovny jako EFCoreSecondLevelCacheInterceptor

Příklad pro ukládání do mezipaměti druhé úrovně:

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

To výrazně zlepšuje výkon v aplikace s velkým počtem čtení tím, že se zabrání redundantním zásahům do databáze.


38) Jak EF Core spravuje tokeny a časová razítka souběžnosti?

Tokeny souběžnosti zabraňují konfliktní aktualizace v prostředí s více uživateli.

Vlastnost můžete označit jako token souběžnosti pomocí [ConcurrencyCheck] or [Timestamp] atribut.

Příklad:

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

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

Když dojde k aktualizaci, EF zahrne tento sloupec do WHERE doložka.

Pokud se hodnota neshoduje, DbUpdateConcurrencyException je hozen – zajištění optimistické řízení souběžnosti.


39) Jak implementujete auditování (vytváření, úpravy, smazání trackrál) v EF Core?

Audit tracmetadata ks, jako například kdo vytvořil, upravil nebo smazal evidence.

Můžete přepsat 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();
}

rozhraní:

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

Tato metoda centralizuje logiku auditu a zajišťuje konzistentní správa dat.


40) Jaké jsou osvědčené postupy pro používání Entity Frameworku v podnikových aplikacích?

Kategorie Nejlepší praxe Prospěch
Výkon Použijte AsNoTracking() a projekce pro dotazy pouze pro čtení. Snižuje režijní náklady.
Design Implementujte vzory úložiště a pracovní jednotky. Zlepšuje udržovatelnost.
Bezpečnost Používejte parametrizované dotazy, abyste se vyhnuli SQL injection. Ochrana dat.
Škálovatelnost Používejte sdružování připojení a asynchronní metody. Zvládá vysokou zátěž.
Migrace Používejte automatizované migrace se správou verzí. Zjednodušuje správu schémat.
Konfigurace Externalizace připojovacích řetězců a tajných kódů. Lepší izolace od okolního prostředí.
Testování Pro jednotkové testy použijte poskytovatele InMemory. Rychlejší testovací běhy.
Přihlášení Povolte protokolování EF pro přehledy o výkonu. Snadnější ladění.

Tyto postupy zajišťují robustní, škálovatelný a snadno udržovatelný aplikace postavené na Entity Frameworku.


41) Jak lze optimalizovat dotazy LINQ pro lepší překlad SQL v Entity Frameworku?

Entity Framework automaticky převádí dotazy LINQ na SQL, ale neefektivní vzory mohou vést k pomalému nebo redundantnímu SQL. Optimalizace LINQ zajišťuje, že ORM generuje výkonné databázové dotazy.

Optimalizační techniky:

Použijte projekce:

  1. Vyberte pouze požadované sloupce místo celých entit.
  2. var customers = context.Customers
        .Select(c => new { c.Id, c.Name })
        .ToList();
    
  3. Vyhněte se hodnocení na straně klienta:
    Vždy zajistěte, aby probíhalo filtrování v SQL, nikoli v paměti. EF Core varuje, když je vyhodnocování na straně klienta.
  4. Použijte AsNoTracking() pro data pouze pro čtení.
  5. var orders = context.Orders.AsNoTracking().ToList();
  6. Využití kompilovaných dotazů pro opakované operace LINQ.
  7. Vyhněte se zbytečným .Include() volá — související údaje uvádějte pouze v případě potřeby.

Příklad:

Neefektivní:

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

Účinný:

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

42) Jaké jsou různé způsoby, jak v EF Core nastavit počáteční data?

Zavádění dat zajišťuje, že databáze má výchozí nebo referenční data když byl vytvořen.

Přístup 1: Použití ModelBuilderu

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

Toto automaticky vkládá data během Update-Database.

Přístup 2: Metoda vlastního semínka

Spusťte kód ručně při spuštění:

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

Přístup 3: SQL skripty

Používejte v migracích surový SQL:

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

Doporučení:
Použijte HasData() pro statická referenční data a programové seeding pro dynamická spouštěcí data.


43) Jak EF Core interně spravuje poskytovatele databází?

EF Core je nezávislý na poskytovateli, což znamená, že může cílit na více databázových strojů prostřednictvím samostatných balíčky poskytovatelů databází.

Běžní poskytovatelé:

Provider NuGet Balíček Databáze
SQL Server Microsoft.EntityFrameworkCore.SqlServer MSSQL
SQLite Microsoft.EntityFrameworkCore.Sqlite Mobil/počítač
PostgreSQL Npgsql.EntityFrameworkCore.PostgreSQL PostgreSQL
MySQL Pomelo.EntityFrameworkCore.MySql MySQL
Kosmos DB Microsoft.EntityFrameworkCore.Cosmos NoSQL

Interně EF Core používá abstracvrstvy pro:

  • Překlad dotazu
  • Generování SQL příkazů
  • Mapa datových typůping

Každý poskytovatel implementuje své vlastní třídy dědící ze základních tříd ABS v EF Core.tracce (např. RelationalDatabaseProvider, QuerySqlGenerator).


44) Co je to „rozdělený dotaz“ a kdy byste ho měli použít?

Rozdělené dotazy brání provádění EF. velké, složité spoje spuštěním více SQL dotazů místo jednoho.

Příklad:

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

Toto provede:

  1. Dotaz 1 → Získat zákazníky
  2. Dotaz 2 → Získání objednávek souvisejících s těmito zákazníky

Výhody:

  • Zabraňuje velkým kartézským součinům.
  • Zlepšuje výkon s velkými souvisejícími datovými sadami.

Nevýhoda:

Vícenásobné návraty do databáze.

Použijte rozdělené dotazy při dychtivém načítání velkých souvisejících dat, což může způsobit problémy s pamětí.


45) Jak lze efektivně monitorovat SQL příkazy generované EF?

Monitorování SQL pomáhá ladit pomalé dotazy a optimalizovat chování ORM.

Metody pro protokolování SQL:

  1. Protokolování konzole
  2. optionsBuilder
        .UseSqlServer(conn)
        .LogTo(Console.WriteLine, LogLevel.Information);
    
  3. Integrace ILoggerFactory
  4. var loggerFactory = LoggerFactory.Create(builder => builder.AddConsole());
    optionsBuilder.UseLoggerFactory(loggerFactory);
    
  5. Interceptory Nářadí DbCommandInterceptor zachytit příkazy a časování.
  6. Nástroje pro profilování Používejte nástroje jako:
    • MiniProfiler
    • SQL Server Profiler
    • EFCorePowerTools

Protokolování by mělo být selektivně povoleno v produkčním prostředí, aby se předešlo režijním nákladům na výkon.


46) Jaký je rozdíl mezi změnou?Tracker.DetectChanges() a AutoDetectChangesEnabled?

vlastnost DetectChanges() AutoDetectChangesEnabled
Typ Metoda Vlastnictví
Účel Vynutí skenování EF tracidentifikovat entity a detekovat změny Povolí/zakáže automatickou detekci změn
Automaticky Manuál Pravdivý
Používání Explicitně volejte po optimalizaci výkonu Zakázat hromadné aktualizace

Příklad:

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

Zakázání automatické detekce ve smyčkách zlepšuje výkon až o 40% při hromadných operacích.


47) Jak se používají časové tabulky s EF Core?

Dočasné tabulky (zavedené v SQL Serveru 2016) vám umožňují trachistorických dat automaticky.

Kroky:

  1. Povolit časovou podporu při migraci:
  2. builder.Entity<Employee>()
        .ToTable("Employees", b => b.IsTemporal());
    
  3. Dotaz na historická data:
  4. var history = context.Employees
        .TemporalAsOf(DateTime.UtcNow.AddDays(-7))
        .ToList();
    

Výhody:

  • Vestavěná historie dat trackrál
  • Audit a dodržování předpisů
  • Nejsou potřeba žádné ruční spouštěče

EF Core 6+ podporuje plné temporální dotazování.


48) Jak EF Core podporuje kompilované dotazy a předem generované modely společně?

Kompilované dotazy a kompilované modely jsou dva výkonnostní vlastnosti které se vzájemně doplňují.

vlastnost Účel
Kompilované dotazy Výsledky překladu dotazů do mezipaměti
Kompilované modely Metadata modelu předkompilace

Příklad kompilovaného dotazu:

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

Použití:

var customer = _getCustomerById(context, 5);

Spolu: Kompilované modely snižují počáteční náklady, zatímco kompilované dotazy snižují režie dotazů za běhu - ideální pro často kladené dotazy.


49) Jaká jsou běžná úskalí při použití EF v architektuře mikroslužeb?

Obyčejné chyby:

  1. Sdílený DbContext napříč službami
    → Porušuje izolaci mikroslužeb.
    → Každá mikroslužba by měla mít svůj vlastní DbContext a schéma.
  2. Upovídaná komunikace (N+1 dotazů)
    → Minimalizujte EF dotazy na volání API.
  3. Nadměrné dychtivé načítání
    → Načíst pouze to, co je potřeba, přes DTO.
  4. Centralizované migrace
    → Každá služba by měla spravovat své vlastní migrace samostatně.
  5. Nedostatek transakčních hranic
    → Pokud je vyžadována konzistence mezi službami, použijte distribuované transakce (vzorec Outbox).
  6. Těsné propojení s poskytovatelem SQL
    → Použijte repozitář abstraczachovat flexibilitu při výběru databáze.

50) Jak se v ASP.NET Core integruje injektáž závislostí s DbContext?

Entity Framework se bezproblémově integruje s Vestavěné vkládání závislostí (DI) v ASP.NET Core systém.

Setup:

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

Pak jej vstříkněte do kontrolerů nebo služeb:

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

Životnost:

Život Description Doporučeno pro
Rozsah Jeden kontext na HTTP požadavek Automaticky
Přechodné Pokaždé nová instance Úlohy na pozadí
Singleton Sdíleno globálně Vyhnout se (není bezpečné pro vlákna)

Použití DI zajišťuje testovatelnost, správa životního cyklu, a účinnost zdrojů napříč webem a procesy na pozadí.


🔍 Nejčastější otázky na pohovoru týkající se Entity Framework s reálnými scénáři a strategickými odpověďmi

1) Co je Entity Framework a proč se používá v podnikových aplikacích?

Očekává se od kandidáta: Tazatel chce posoudit vaše základní znalosti Entity Frameworku a jeho přínosu v reálných aplikacích.

Příklad odpovědi: Entity Framework je objektově-relační mapaping Framework pro .NET, který umožňuje vývojářům pracovat s databázemi pomocí objektů .NET namísto surového SQL. Používá se v podnikových aplikacích ke zvýšení produktivity, snížení počtu standardního kódu pro přístup k datům a udržení silného oddělení odpovědností.


2) Můžete vysvětlit rozdíl mezi Code Za prvé, přístupy Database First a Model First?

Očekává se od kandidáta: Tazatel chce zhodnotit vaše znalosti různých vývojových pracovních postupů a to, kdy je použít.

Příklad odpovědi: Code Metoda First začíná s doménovými třídami a generuje databázi z kódu. Metoda Database First začíná s existující databází a generuje třídy entit. Metoda Model First používá vizuální návrhář k definování modelu a poté vytváří kód i databázi. Každý přístup je vybrán na základě požadavků projektu a stávající infrastruktury.


3) Jak Entity Framework zpracovává vztahy mezi tabulkami?

Očekává se od kandidáta: Tazatel ověřuje vaše znalosti datového modelování a relační mapy.ping.

Příklad odpovědi: Entity Framework zpracovává vztahy pomocí navigačních vlastností a cizích klíčů. Podporuje vztahy typu jeden k jednomu, jeden k mnoha a mnoho k mnoha, což umožňuje vývojářům procházet souvisejícími daty pomocí odkazů na objekty namísto spojení.


4) Popište situaci, kdy jste zlepšili výkon databáze pomocí Entity Frameworku.

Očekává se od kandidáta: Tazatel chce slyšet praktický příklad demonstrující optimalizační dovednosti.

Příklad odpovědi: V mé předchozí roli jsem zlepšil výkon omezením zbytečného rychlého načítání a implementací projekčních dotazů pomocí příkazů SELECT. Tím se minimalizovalo množství dat načítaných z databáze a výrazně se zkrátila doba provádění dotazů.


5) Jak se spravují migrace v Entity Frameworku?

Očekává se od kandidáta: Tazatel hodnotí vaše zkušenosti se změnami schémat a správou verzí.

Příklad odpovědi: Migrace se spravují pomocí vestavěných migračních nástrojů, které tracModel k se v průběhu času mění. Na předchozí pozici jsem pravidelně generoval a kontroloval migrační skripty před jejich použitím, abych zajistil integritu databáze napříč prostředími.


6) Co je to líné načítání a kdy byste se mu měli vyhnout?

Očekává se od kandidáta: Tazatel chce ověřit vaše znalosti strategií načítání dat a kompromisů ve výkonu.

Příklad odpovědi: Líné načítání automaticky načítá související data při jejich přístupu. Vyhnul bych se jeho použití ve scénářích nebo API kritických pro výkon, protože může způsobit více nezamýšlených volání databáze, což vede k problému s dotazy N+1.


7) Jak zpracováváte transakce v Entity Frameworku?

Očekává se od kandidáta: Tazatel hodnotí vaše znalosti o konzistenci dat a řešení chyb.

Příklad odpovědi: Entity Framework podporuje transakce prostřednictvím DbContext a TransactionScope. V mém předchozím zaměstnání jsem používal explicitní transakce, abych zajistil, že více souvisejících databázových operací bude buď úspěšně dokončeno společně, nebo že budou v případě selhání vráceny zpět.


8) Vysvětlete, jak se v Entity Framework používá injektáž závislostí.

Očekává se od kandidáta: Tazatel chce vidět, jak dobře rozumíte moderní architektuře aplikací.

Příklad odpovědi: Vkládání závislostí se používá k vložení DbContextu do služeb nebo kontrolerů. To zlepšuje testovatelnost a údržbu tím, že umožňuje simulaci nebo nahrazení kontextu bez změny obchodní logiky.


9) Popište náročnou chybu, na kterou jste narazili v Entity Frameworku, a jak jste ji vyřešili.

Očekává se od kandidáta: Tazatel hledá schopnost řešit problémy a odstraňovat chyby.

Příklad odpovědi: V mé poslední roli jsem narazil na problém s trackonflikty krále při aktualizaci oddělených entit. Vyřešil jsem to explicitním nastavením stavů entit a zajištěním, aby se vyskytovala pouze jedna instance každé entity. tracovlivněno kontextem.


10) Jak se rozhodnete, kdy Entity Framework není ten správný nástroj?

Očekává se od kandidáta: Tazatel chce pochopit váš úsudek a schopnost vybrat vhodné technologie.

Příklad odpovědi: Zvažuji alternativy, když aplikace vyžadují extrémně výkonný přístup k datům nebo složitou logiku uložených procedur. V takových případech může použití mikro-ORM nebo raw ADO.NET poskytnout větší kontrolu a efektivitu.

Shrňte tento příspěvek takto: