Miroslav Holec
Premium

Budoucnost Entity Framework Code First

Miroslav Holec   14. října 2015  update 29. března 2016

Tento článek je již zastaralý. Článek nemusí popisovat aktuální stav technologie, ideální řešení a můj současný pohled na dané téma.

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.

👨‍🎓 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.