Miroslav Holec

Software & Cloud Architect

miroslavholec.cz / blog / entity-framework-code-first-zarna-budoucnost

Budoucnost Entity Framework Code First

Miroslav Holec

Miroslav Holec

Publikován 14. října 2015 , aktualizace: 29. března 2016

Tento článek je starší 18 měsíců a je proto možné, že popisuje postupy nebo technologie, které v uplynulé době mohly doznat výraznějších změn. Názory a myšlenky v tomto článku již nemusí vyjadřovat současné stanovisko autora nebo autorů. Článek byl napsán 14. října 2015.

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.

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í.

Školení ASP.NET Core a Entity Framework Core

Budoucnost platformy .NET bude patřit technologiím ASP.NET Core a EF Core. Přijďte se naučit tyto moderní technologie používat na mém praktickém školení.

6.11.2017 - 8.11.2017 ASP.NET Core MVC
20.11.2017 - 21.11.2017 Entity Framework Core