COVID-19: Všechna školení nyní i on-line. Přečtěte si mé tipy na vzdělávání v době koronavirové.
Slovenská verzeSlovensky

Budoucnost Entity Framework Code First

Entity Framework je tu s námi již několik let a pro nově vznikající aplikace se stává volbou číslo jedna při volbě vhodného ORM nebo obecného řešení přístupu k datům v relační databázi. Dnes se už opouští i od použití klasických EDMX modelů (Model First / Database First) a na jejich místo přichází metodika Code First, kterou bude Microsoft v budoucnu preferovat (resp. budoucnost začala včera). V tomto článku shrnu důležitá fakta o Code First a zároveň si dovolím čtenáře pozvat na mé školení Entity Framework - Code First, které proběhne 14. 12. 2015 v Praze.

Miroslav Holec

Miroslav Holec

14. října. 2015
upraven 29. března. 2016

Tento článek je již velmi zastaralý. Zastaralé články nemusí popisovat aktuální stav technologií, nejideálnější řešení a můj aktuální pohled na danou technologii.

👨‍🎓 Nové školení EF Core pro rok 2020

Školení nejnovější verze Entity Framework Core přímo u Vás ve firmě. Naučíte se používat EF Core v celém životním cyklu aplikace od vytvoření modelu, změn v podobě migrací až po dotazování a profilování databázových dotazů.

Více o školení Entity Framework Core

Code First vs. Database First

Code First je z dnešního pohledu nešťastně zvolený název, který se snažil ve svých počátcích vyjádřit rozdíl od řešení Model First a Database First. Důležité nicméně je, že Code First se hodí jak pro scénáře, kdy databázové schéma (fyzické) vzniká psaním aplikačního kódu tak i pro situace, kdy již databázové schéma existuje a vývojář jen potřebuje "překlopit" jej do podoby aplikačního kódu, aby s ním mohl dále pracovat (tzv. reverse enginering.) Právě pro druhý zmíněný scénář se stále ještě (zbytečně) vývojáři vydávají cestou Database First, jejíž EDMX model přináší řadu nešvarů spojených s týmovým vývojem (např. problém mergování změn v source controlu).

V případě, že již existuje databázové schéma, je možné využít například EF Power Tools pro vygenerování kódu z fyzického schématu. Principielně však vývojáři nebrání nic v tom, aby to jisté, co je v databázi popsal metodou Code First a bez problémů se proti existující databázi napojil. Tento scénář má podstatě lepší podporu už od verze EF 6.0.

Čistý a čitelný kód

Výhodou Code First je bezesporu čistota kódu. Kromě popisu vztahů mezi entitami formou datových anotací je možné použít Fluent API a oddělit tak zcela popisy vztahů a vlastnosti databázových atributů od entit. Díky tomu má vývojář k dispozici čisté POCO třídy a jejich konfigurace v samostatně udržovaných třídách.

public class Product 
{
	public int ProductId { get; set; }
	public string Title { get; set; }
}

public class ProductDbConfiguration : EntityTypeConfiguration<Product>
{
    public ProductDbConfiguration()
    {
        Map(x => x.ToTable("Products"));
        HasKey(x => x.ProductId);
        Property(x => x.Title).HasMaxLength(50).IsRequired();
    }
}

Scénáře nasazení

Code First s DbContext API poskytuje hned několik scénářů práce se schématem, které je možné uplatnit v různých situacích. Může se jednat o situace ranného vývoje a potřeby likvidace a okamžitého vytvoření schématu s každou kompilací aplikace až po scénář produkčního režimu v rámci kterého se tým rozhodne provádět změny v db schématu manuálně nebo zcela automaticky.

Klíčovou roli v jednotlivých scénářích zastává tzv. seedování, díky němuž lze do databáze uložit výchozí data (nejčastěji uživatele, role, konfigurace atd.) a dále pak data související s updatem schématu (doplnění nových dat k novým tabulkám).

Entity Framework ve své verzi EF 6.0. dozrál i ve schopnosti vytvářet z kódu různé indexy a integritní omezení. Od nové verze tak není problém například zajistit tvorbu unikátních indexů přímo z aplikačního kódu. Trendem poslední doby je tedy vývojáře odstínit od databázové problematiky (bez ztráty kontroly) a dát mu více prostoru realizovat se v kódu jako takovém.

Výkonnost a implementace

Velkou výzvou pro vývojový tým EF jes samozřejmě výkonnost, která je řešena hned na několika úrovních. Dnes již EF podporuje řadu různých mechanismů, díky kterým je možné dosáhnout velmi dobrých výkonnostních výsledků. Klíčovou roli při rozhodování hrají pouze potřeby vývojářského týmu a posléze kompromis mezi komfortem a větším úsilím. Pro ladění výkonu a hledání úzkých míst je dnes již k dispozici celá řada profilovacích nástrojů. Snad nejznáměnším je Entity Framework Profiler.

Nakonec je také důležité zmínit schopnost integrace ORM do samotné architektury aplikace. V současnosti je Entity Framework implementován vývojáři do projektů s řadou oblíbených patternů, mezi které patří mj. repository pattern nebo unit of work. Právě vytvořením robustní datové vrstvy s využitím EF je možné vyvíjené řešení snadněji testovat například s pomocí unit testů.

Code First je tu s námi už relativně dlouhou dobu, nicméně poslední měsíce se jednoznačně ukazuje, že se jedná o přístup, který se dlouhodobě stane vývojářským standardem při vývoji moderních webových aplikací.

Dodatek k článku po 5 letech

Po pěti letech již Microsoft původní Entity Framework 6 nadále nerozvíjí, avšak metodika Code First se stala jediným a základním přístupem v novém frameworku Entity Framework Core. V současné době stále umožňuje tvorbu směrem od aplikačního kódu ke koncovému úložišti, tak reverse engineering od databáze ke kódu.


👨‍🎓 Webináře pro vývojáře - nyní zdarma

Vzdělávat se můžete i z pohodlí domova. Klasická školení jsem doplnil o související témata, která si můžete poslechnout v podobě živých webinářů. Přidejte se téměř 200 vývojářům, kteří se již připojili k mým webinářům!

Termín Místo
🍀 Software a nástroje, které používám 6. října 2020 online více
🍀 Co ještě nevíte o middlewares 9. října 2020 online více
🍀 Blazor Server 16. října 2020 online více
🍀 Novinky v .NET 5 pro REST API 21. října 2020 online více
Loading