NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 2 - Instalace a první model v Entity Framework Core a C# .NET

V minulé lekci, Úvod do Entity Framework Core v C# .NET, jsme si uvedli a porovnali různé způsoby práce s relačními databázemi v C# .NET.

V dnešním Entity Framework Core tutoriálu, v jazyce C# .NET, si připravíme Visual Studio a založíme náš první projekt s Entity Framework Core, který si nainstalujeme. Nakonec ještě začneme pracovat na tvorbě jednoduchého modelu.

V našem prvním projektu budeme používat odlehčenou verzi Microsoft SQL Server databáze označovanou LocalDB. Tato databáze se nejčastěji používá buďto při vývoji aplikace, a ve finální verzi je nahrazena, anebo někdy i jako lokální úložiště dat.

Ve druhém případě se však spíše volí databáze SQLite.

Příprava LocalDB

LocalDB je možné si nainstalovat skrze Visual Studio Installer, a to buď v rámci sady funkcí Ukládání a zpracování dat (Data storage and processing), anebo Vývoj pro ASP.NET a web (ASP.NET and web development).

Jestli některou z těchto sad máme nainstalovanou, si ověříme ve Visual Studio Installer kliknutím na Změnit u námi používané verze Visual Studia. Ujistíme se, že máme zaškrtnutou aspoň jednu z těchto sad, případně některou zaškrtneme a změny potvrdíme:

Sada funkcí Ukládání a zpracování dat - Entity Framework Core v C# .NET

Alternativně můžeme LocalDB nainstalovat jen jako samostatnou komponentu SQL Server Express 2019 LocalDB v odpovídající záložce Jednotlivé komponenty:

Komponenta LocalDB - Entity Framework Core v C# .NET

Kurz je psaný s použitím Visual Studio 2022.

Database First a Code First přístup

V lekci Úvod do Entity Framework Core v C# .NET jsme si již řekli, že k tomu, abychom v Entity Framework Core mohli komunikovat s SQL databází, potřebujeme tzv. model. Modelem chápeme popis struktury databáze ve formě C# tříd. Tento popis se skládá zejména z jednotlivých entit a databázového kontextu.

V Entity Framework Core můžeme zvolit jeden ze dvou přístupů, jak takový model vytvořit. Konkrétně se jedná o přístupy Database First a Code First.

Database First

Přístup Database First předpokládá, že se chceme připojit k již existující SQL databázi. Všechny třídy našeho modelu tak musíme uzpůsobit tabulkám dané databáze, aby přesně kopírovaly jejich strukturu. I když Entity Framework Core naštěstí nabízí nástroje, které dokáží z SQL databáze automaticky vygenerovat model zcela za nás, tak tento přístup v dnešní době již není úplně populární. Pro tvorbu i té nejjednodušší databáze po nás totiž vyžaduje psaní SQL příkazů.

Code First

Mnohem populárnější je opačný přístup, přistup Code First, kdy nejprve napíšeme náš model a následně si z něj necháme automaticky vygenerovat celou databázi. Při tvorbě aplikace tak nemusíme přecházet mezi dvěma různými jazyky, vše píšeme pouze v jazyce C#, a vyhneme se tak množství chyb z nepozornosti. Entity Framework Core dokonce nabízí prostředky pro snadnou a bezpečnou aktualizaci databáze po změně definice modelu.

My pro náš projekt zvolíme právě přístup Code First. První si tedy napíšeme třídy pro entity a databázový kontext a databázi si z nich poté necháme vygenerovat.

Založení projektu

Nyní se již můžeme vrhnout na tvorbu našeho prvního projektu. Celý kurz se bude věnovat především tvorbě databáze a komunikaci s ní, nebudeme se tak zabývat tvorbou nějakého sofistikovaného uživatelského rozhraní. Entity Framework Core naštěstí není vázaný na jeden konkrétní typ projektu, proto budou všechny naše projekty v tomto kurzu jednoduché konzolové aplikace.

V případě, že by vás zajímalo, jak Entity Framework Core zapracovat do ASP.NET Core projektu, tak můžete po absolvování tohoto kurzu navštívit odpovídající sekci ASP.NET Core - Webové aplikace v C#, kde jej používáme téměř v každém kurzu.

Otevřeme si tedy Visual Studio a vytvoříme novou C# .NET konzolovou aplikaci, kterou si pojmenujeme třeba FirstEFCoreProject:

Výběr názvu a umístění projektu - Entity Framework Core v C# .NET

Verzi frameworku zvolíme ideálně tu nejnovější, v našem případě .NET 7:

Výběr verze frameworku - Entity Framework Core v C# .NET

Instalace Entity Framework Core

Entity Framework Core se do C# .NET projektů instaluje prostřednictvím NuGet balíčků. Těchto balíčků máme k dispozici více podle poskytovatelů databází. My využijeme balíček Microsoft.EntityFrameworkCore.SqlServer určený pro Microsoft SQL Server databáze.

V okně Solution Explorer tedy klikneme pravým tlačítkem na Solution a zvolíme Manage NuGet Packages for Solution.... V záložce Browse si vyhledáme a vybereme balíček Microsoft.EntityFrameworkCore.SqlServer. Poté v menu napravo zaškrtneme náš jediný projekt a vybereme nejnovější dostupnou verzi balíčku pro .NET, ve kterém aplikaci vyvíjíme.

Jestliže vyvíjíme například v .NET 7, tak balíčky nainstalujeme ve verzi 7.x.y, kde x a y jsou největší možná čísla.

Instalaci potvrdíme tlačítkem Install:

Instalace balíčku přes NuGet Package Manger - Entity Framework Core v C# .NET

Tím máme náš projekt připravený a můžeme se dát na psaní kódu.

Entita Author

V našem prvním projektu budeme mít pouze jednu entitu, a to entitu Author představující autora článků v redakčním systému. Entita bude mít vlastnosti:

  • Id - unikátní identifikátor autora,
  • Name - jméno,
  • LastName - příjmení,
  • BirthDate - datum narození,
  • ArticlesCount - počet napsaných článků.

Přidejme si do projektu novou třídu Author s výše uvedenými vlastnostmi:

namespace FirstEFCoreProject;

public class Author
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; } = "";
    public string LastName { get; set; } = "";
    public DateTime BirthDate { get; set; }
    public int ArticlesCount { get; set; }
}

Od Visual Studio 2022 jsou všechny projekty automaticky generovány s povolenou funkcí nullovatelných referenčních typů (funkce přidána v C# 8.0). Tato funkce nám umožňuje nastavit hodnotu null pouze atributům nebo vlastnostem, které mají definici typu označenou operátorem ?, a to i v případě, že se jedná o referenční datový typ. Každý atribut nebo vlastnost referenčního datového typu tak musí mít při vytváření objektu nastavenou nějakou výchozí hodnotu jinou než null, pokud není označen jako nullovatelný operátorem ?. Proto našim vlastnostem nastavujeme jako výchozí hodnotu prázdný řetězec.

Vlastnost Id jsme anotovali atributem [Key] ze jmenného prostoru System.ComponentModel.DataAnnotations. Tímto atributem říkáme, že se odpovídající sloupec v databázi vygeneruje s primárním klíčem. Každý záznam tak bude moci v tomto sloupci obsahovat pouze unikátní hodnoty a bude díky tomu tímto sloupcem jednoznačně identifikovatelný. Ve výchozím nastavení musí mít všechny entity v Entity Framework Core svůj primární klíč.

Databázový kontext

Databázi nám bude spolu s entitou Author popisovat databázový kontext. Databázovým kontextem je jakýkoliv potomek třídy DbContext.

V databázovém kontextu definujeme připojení k databázi, jaké tabulky má databáze obsahovat, vztahy mezi těmito tabulkami a mnohé další. Instance databázového kontextu představuje spojení s databází, které lze použít k dotazování a ukládání dat do databáze.

Naším databázovým kontextem bude třída FirstDbContext, kterou si přidáme do projektu:

namespace FirstEFCoreProject;

public class FirstDbContext : DbContext
{
}

Třídu jsme podědili od zmiňované třídy DbContext, kterou nalezneme ve jmenném prostoru Microsoft.EntityFrameworkCore.

Tabulky

Jednotlivé tabulky databáze reprezentujeme v databázovém kontextu vlastnostmi typu DbSet<T>. Přidejme si do našeho databázového kontextu vlastnost Authors typu DbSet<Author> reprezentující tabulku autorů:

namespace FirstEFCoreProject;

public class FirstDbContext : DbContext
{
    public DbSet<Author> Authors { get; set; }
}

S takto nadefinovaným databázovým kontextem nám Entity Framework Core později v databázi vygeneruje tabulku Authors se sloupci odvozenými z vlastností třidy Author.

Spojení s databází

Abychom se mohli připojit k jakékoliv databázi, tak nejprve potřebujeme mít vytvořený tzv. connection string. Jedná se o řetězec, který obsahuje všechny údaje potřebné k připojení k databázi. Typicky obsahuje adresu serveru s databází, název databáze, případné heslo a další.

Connection string lze předat databázovému kontextu vícero způsoby, my zvolíme ten nejjednodušší, tedy metodu OnConfiguring(). Jedná se o virtuální metodu třídy DbContext, která v parametru přijímá instanci třídy DbContextOptionsBuilder. Na této instanci budeme provádět veškeré konfigurace spojení s databází.

Ke konfiguraci connection stringu nabízí pro třídu DbContextOptionsBuilder každý poskytovatel databáze své rozšiřující metody. V případě Microsoft SQL Server databází se jedná o metodu UseSqlServer():

namespace FirstEFCoreProject;

public class FirstDbContext : DbContext
{
    public DbSet<Author> Authors { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=FirstEFCoreDatabase");
    }
}

V našem databázovém kontextu jsme přepsali zmiňovanou metodu OnConfiguring() a na instanci třídy DbContextOptionsBuilder zavolali metodu UseSqlServer(). Této metodě jsme předali connection string popisující spojení k naší budoucí databázi, kterou nám Entity Framework Core vygeneruje.

Tento connection string se skládá ze dvou položek:

  • Server - adresa serveru, na kterém databáze poběží (v našem případě se jedná o LocalDB),
  • Database - název samotné databáze (FirstEFCoreDatabase).

To bude pro tuto lekci vše.

V příští lekci, Generování databáze v Entity Framework Core a C# .NET, si z našeho prvního modelu necháme vygenerovat databázi.


 

Měl jsi s čímkoli problém? Zdrojový kód vzorové aplikace je ke stažení každých pár lekcí. Zatím pokračuj dál, a pak si svou aplikaci porovnej se vzorem a snadno oprav.

Předchozí článek
Úvod do Entity Framework Core v C# .NET
Všechny články v sekci
Entity Framework Core v C# .NET
Přeskočit článek
(nedoporučujeme)
Generování databáze v Entity Framework Core a C# .NET
Článek pro vás napsal Radek Vymětalík
Avatar
Uživatelské hodnocení:
47 hlasů
...
Aktivity