Principy EF Core

Dokončeno

Entity Framework Core (EF Core) je objektově-relační mapovač (ORM). ORM poskytuje vrstvu mezi doménovým modelem, který implementujete v kódu a databázi. EF Core je rozhraní API pro přístup k datům, které umožňuje interakci s databází pomocí prostých starých objektů CLR (Common Runtime Language) a syntaxe LINQ (High Typed Language Integrated Query).

V EF Core se databáze abstrahuje za poCO .NET. EF Core zpracovává přímou interakci s podkladovou databází. Při použití tohoto rozhraní API můžete trávit méně času překladem požadavků do a z databáze a psaním SQL a více času se zaměřením na důležitou obchodní logiku.

S EF Core můžete:

  • Načtěte data jako objekty (entity) jazyka C#.
  • Přidejte, upravte a odstraňte data voláním metod u entit.
  • Namapovat více databázových tabulek na jednu entitu jazyka C#.
  • Zpracujte problémy souběžnosti, ke kterým dochází, když se více uživatelů současně pokusí aktualizovat stejný záznam.
  • K dotazování databáze použijte syntaxi LINQ (System.Linq).
  • Získejte přístup k více databázím, včetně SQL Serveru, SQLite, Azure Cosmos DB, PostgreSQL, MySQL a dalších.
  • Sestavte model domény z existující databáze.
  • Správa schématu databáze na základě doménového modelu
  • Potvrďte změny do složitých, hlubokých nebo širokých grafů objektů souvisejících entit pomocí jednoho volání metody.

Kontrola architektury EF Core

Následující diagram znázorňuje architekturu EF Core:

Diagram znázorňující komponenty a procesy v architektuře Entity Framework Core

DbContext je speciální třída, která představuje jednotku práce. DbContextposkytuje metody, které můžete použít ke konfiguraci možností, připojovací řetězec, protokolování a modelu, který slouží k mapování domény na databázi.

Třídy odvozené z DbContext:

  • Představují aktivní relaci s databází.
  • Ukládají instance entit a dotazují se na ně.
  • Zahrnout vlastnosti typu DbSet<T> , které představují tabulky v databázi.

Komponenta EF Core Provider provádí překlad změn grafu objektu do SQL.

Zprostředkovatel databáze:

  • Knihovna modulů plug-in, která je určená pro konkrétní databázový stroj, jako je například SQL Server, Azure Cosmos DB nebo PostgreSQL.
  • Překládá volání metod a dotazy LINQ do nativního dialektu SQL databáze.
  • Rozšiřuje možnosti EF Core tím, že povoluje funkce, které jsou pro daný databázový stroj jedinečné.

Správa databázových schémat

EF Core nabízí dva primární způsoby synchronizace modelu EF Core a schématu databáze:

  • Migrace (model jako zdroj pravdy)
  • Zpětná analýza (databáze jako zdroj pravdy)

Pokud si chcete vybrat mezi těmito možnostmi, rozhodněte se, jestli je zdrojem pravdy váš model EF Core nebo schéma databáze.

Migrace

V reálných projektech se datové modely mění při implementaci funkcí aplikace. Při přidání a odebrání nových entit je potřeba odpovídajícím způsobem změnit schémata databáze. Funkce migrace EF Core poskytuje způsob, jak přírůstkově aktualizovat schéma databáze, aby bylo možné ho udržovat v synchronizaci s datovým modelem aplikace při zachování stávajících dat v databázi.

Při zavedení změny datového modelu vývojář pomocí nástrojů EF Core přidá odpovídající migraci. EF Core porovná aktuální model se snímkem předchozího modelu a určí rozdíly. Vygeneruje se kód jazyka C# pro implementaci změn. Soubory jazyka C# můžete upravit pro vlastní chování nebo na počáteční data. Soubory se sledují ve správě zdrojového kódu projektu stejně jako v jakémkoli jiném zdrojovém souboru.

Po vygenerování nové migrace je možné ji použít pro databázi různými způsoby. EF Core zaznamenává všechny použité migrace ve speciální tabulce historie. Tabulka historie uchovává záznam o tom, které migrace se použily.

Zpětná analýza

Zpětná analýza je proces generování tříd modelu entit a DbContext třídy založené na schématu databáze. Tento přístup se často používá s existujícími nebo sdílenými databázemi, které spravuje správce databáze.

V další lekci začnete s EF Core s využitím migrace.

Kontrola znalostí

1.

Která třída poskytuje základní sadu operací, které můžete použít ke konfiguraci a interakci s databází?