Při práci s databázemi v ASP.NET Core je klíčové správně nastavit všechny součásti aplikace, které zajišťují komunikaci mezi databází a kódem. DbContext je základní prvek, který slouží k mapování objektů aplikace na databázové tabulky a naopak. Při správném nastavení a používání DbContextu může vývojář snadno manipulovat s daty v databázi bez nutnosti psát SQL dotazy ručně. Tento přístup nejen zjednodušuje práci, ale i zvyšuje úroveň abstrakce a bezpečnosti aplikace. V následujícím textu si ukážeme, jak správně nastavit DbContext, používat připojovací řetězce, konfigurační soubory a migrovat databázi.
Správnou praxí při práci s připojovacími údaji je využívání nástrojů, které zabezpečí správu tajemství, jako například Azure App Configurator, nebo konfigurace tajemství přímo v rámci aplikace. Pro účely výuky však budeme používat připojovací řetězec v souboru appsettings.json. Tento soubor může vypadat následovně:
Tento připojovací řetězec používá databázový server běžící na Dockeru. Používáme databázi dbBanking, která bude sloužit pro tuto aplikaci. V rámci konvence ASP.NET Core 9 je objekt ConnectionStrings považován za konvenci, kde každý jeho prvek představuje jiný připojovací řetězec pro různé databázové kontexty.
DbContext a Unit of Work
DbContext je základní objekt pro komunikaci s databází. Implementuje návrhový vzor Unit of Work, který spravuje objekty v paměti a provádí změny v databázi, když je to nutné. Tento vzor umožňuje rozdělení odpovědnosti mezi obchodní logiku a logiku přístupu k databázi, což vede k lepší organizaci kódu a lepší údržbě aplikace.
Třída BankingDbContext bude vypadat následovně:
V tomto příkladu je třída BankingDbContext odvozena od třídy DbContext. Kromě toho má tři vlastnosti typu DbSet, které reprezentují tabulky v databázi – Accounts, Customers a Movements. Třída DbSet poskytuje metody pro manipulaci s daty v těchto tabulkách. Tímto způsobem EF Core (Entity Framework) provádí mapování mezi objekty a databázovými řádky a generuje příslušné SQL příkazy pro manipulaci s daty.
Možnost konfigurace pomocí Fluent API
Pokud je potřeba přizpůsobit názvy tabulek, sloupců nebo jiných aspektů databáze, lze to provést pomocí Fluent API, což je výkonný nástroj pro konfiguraci mapování mezi entitami a databázovými objekty. Tento způsob je užitečný v případě, že chcete mít plnou kontrolu nad tím, jak jsou vaše doménové objekty mapovány na databázové entity.
Příklad konfigurace tabulky pro třídu Customer pomocí Fluent API může vypadat takto:
Tento kód přizpůsobí mapování třídy Customer na databázovou tabulku tbl_customer a nastaví názvy sloupců a klíčů. Kromě toho je definováno i cizí klíčové spojení mezi tabulkou Accounts a Customers.
Správná konfigurace DI (Dependency Injection)
Po definování třídy BankingDbContext je nutné tuto třídu nakonfigurovat v rámci kontejneru pro závislosti (DI). V souboru Program.cs přidáme následující kód, který nakonfiguruje připojovací řetězec pro aplikaci:
Tento kód říká, že pro třídu BankingDbContext bude použita konfigurace z připojovacího řetězce definovaného v souboru appsettings.json.
Migrace databáze
Pokud jsou v aplikaci prováděny změny v modelech, je nutné použít migrace, aby databáze a aplikace byly synchronizovány. Migrace umožňují generovat SQL skripty, které reflektují změny v modelu, jako je přidávání nebo odebírání tabulek nebo sloupců.
Pro vytvoření první migrace použijeme následující příkaz v terminálu:
Tento příkaz vytvoří migraci s názvem InitialDatabase, která se použije pro inicializaci databáze. Jakékoli další změny v modelu vyžadují přidání nových migrací a aplikování těchto změn na databázi pomocí příkazu dotnet ef database update.
Závěr
Práce s databázemi v ASP.NET Core vyžaduje dobré pochopení struktury DbContextu, používání připojovacích řetězců, správného mapování entit a efektivního využívání migrací pro udržení synchronizace mezi aplikací a databází. Používání správného přístupu k databázi, jako je například použití Unit of Work vzoru, usnadňuje vývoj, zvyšuje flexibilitu aplikace a poskytuje vysokou úroveň abstrakce, která usnadňuje práci s daty.
Jak efektivně pracovat s EF Core a Dapper v ASP.NET Core
V tomto textu si ukážeme, jak efektivně pracovat s dvěma významnými technologiemi pro práci s databázemi v prostředí ASP.NET Core – Entity Framework Core (EF Core) a Dapper. Obě tyto technologie přinášejí různé výhody a v některých případech mohou být použity společně pro dosažení optimálního výkonu a flexibility.
Začneme s ukázkou kódu, který ukazuje jednoduché použití Dapper pro získání dat z databáze. Kód následujícího typu provádí dotaz na databázi pomocí SQL příkazu, který je mapován na C# objekt:
Pojďme se podívat na klíčové části tohoto kódu.
V jazyce C# a ASP.NET Core 9 je syntaxe _ => new známá jako „discarded lambda“, která se používá v případech, kdy není potřeba využít vstupní parametr lambda výrazu. Tento styl zápisu je praktický v případech, kdy parametry, které jsou předány, nejsou přímo používány v těle funkce.
Dále používáme objekt SqlConnection, který je přidán do kontejneru pro Dependency Injection (DI) a používá stejný connection string jako DbContext. Přidání do DI pomocí metody AddScoped znamená, že tento objekt bude opakovaně použit během jedné HTTP žádosti.
V samotném SQL dotazu je použita metoda QueryFirstOrDefaultAsync, která umožňuje vrátit první nalezený záznam nebo null, pokud žádný záznam neodpovídá kritériím. Klíčová je zde parametrizace dotazu, kde @Id slouží jako zástupce pro parametr předaný z C# objektu.
Dapper, jak ukazuje tento příklad, je velmi výkonný mikro ORM, který nabízí přímý přístup k SQL dotazům a zároveň zajišťuje jejich efektivní mapování na C# objekty. Výhodou Dapperu je rychlost a nízká režie při práci s databází, což je důležité zejména v případech, kdy je nutné provádět optimalizované a výkonné databázové operace.
Nicméně, jak bylo zmíněno v textu, načítání všech záznamů z databáze v jednom dotazu je často neefektivní a může způsobit problémy s výkonem, zejména když je v databázi miliony záznamů. Proto je doporučeno používat stránkování (pagination), které rozděluje data do menších, lépe zvládnutelných bloků. Tato technika nejenže zlepšuje výkon aplikace, ale také zajišťuje lepší uživatelský zážitek při práci s velkými objemy dat.
Další důležitou funkcionalitou je Dapper SQL Builder, který umožňuje generovat SQL dotazy dynamicky a efektivně. Tato rozšíření jsou zvláště užitečná, když je třeba manipulovat se SQL řetězci na základě podmínek, které se mohou měnit během vykonávání aplikace. Tento nástroj je vysoce doporučován pro vývojáře, kteří potřebují flexibilitu při generování SQL dotazů bez nutnosti psát opakující se kód.
Ve všech těchto případech, kdy kombinujeme EF Core a Dapper, máme možnost využít výhod obou technologií. EF Core poskytuje výhody v oblasti mapování objektů na databázové záznamy a nabízí robustní nástroje pro práci s relačními databázemi, zatímco Dapper poskytuje nízkou režii a flexibilitu při práci s vysoce výkonnými dotazy.
Je však důležité si uvědomit, že i když Dapper nabízí výkonné možnosti pro přímou manipulaci s SQL dotazy, je vhodné zvolit správný nástroj podle potřeby aplikace. EF Core je ideální pro aplikace, které vyžadují komplexní modely dat a transakční logiku, zatímco Dapper by měl být využíván pro specifické, výkonově náročné operace nebo pro případy, kde je potřeba jemná kontrola nad SQL dotazy.
Kombinace obou těchto nástrojů v rámci ASP.NET Core poskytuje vývojářům širokou škálu možností pro optimalizaci výkonu aplikací, zjednodušení práce s databázemi a zajištění kvalitní a udržitelné kódové základny.
Pokud jde o další aspekty, které by měl čtenář zvážit při použití těchto nástrojů, je důležité se zaměřit na správnou správu životního cyklu připojení k databázi a správné použití transakcí v případech, kdy je třeba provést složité operace na více tabulkách. Také je třeba mít na paměti, že používání parametrizovaných dotazů (jako v případě Dapperu) výrazně zvyšuje bezpečnost aplikace tím, že minimalizuje riziko SQL injekcí.
Pokud se zaměříme na skutečné využití těchto technologií v produkčních aplikacích, je důležité také pečlivě testovat výkon aplikace a zajistit, aby operace s databází byly co nejrychlejší. Načítání dat z databáze a jejich následné zpracování by mělo být optimalizováno tak, aby aplikace byla schopna efektivně reagovat i při vysokých objemech dat.
Jak nakonfigurovat ASP.NET Core Identity v databázovém kontextu a provést migrace pro správu identity
V rámci vývoje aplikace v ASP.NET Core je nezbytné správně nakonfigurovat třídu DbContext v kontejneru pro závislosti. Tímto způsobem zajistíme, že aplikace bude schopna efektivně pracovat s databází, která bude spravovat všechny požadavky související s autentifikací a autorizací. V tomto případě přidáváme třídu BankingDbContext do kontextu závislostí a zároveň konfigurujeme použití SQL Serveru, jehož připojení je specifikováno prostřednictvím hodnoty ConnectionString, která je předána metodě UseSqlServer. Tento ConnectionString se obvykle získává prostřednictvím nastavení aplikace, která mohou být uložena v souboru appsettings.json.
Tato konfigurace nám umožňuje mít všechny potřebné základy pro správnou implementaci ASP.NET Core Identity v rámci datové vrstvy. Jakmile je tato konfigurace provedena, přichází na řadu aktualizace databáze, aby bylo možné přidat potřebné tabulky pro správu identity.
Aktualizace databáze
V předchozím oddílu knihy jsme vytvořili API, které simuluje operace digitální banky a propojuje je s databází pomocí Entity Framework Core. Pro tento příklad použijeme stejnou databázi – dbBanking. Aktuálně obsahuje následující datovou strukturu: dbo.Accounts, dbo.Customers, dbo.Movements a dbo.EFMigrationsHistory. Tabulka dbo.EFMigrationsHistory je zodpovědná za správu historie migrací prováděných na databázi.
V tomto okamžiku musíme provést aktualizaci databáze, aby byla kompatibilní se systémem Identity. Nejprve je třeba spustit příkaz pro vytvoření nové migrace. V terminálu, který používáte, přejděte do kořenového adresáře aplikace a spusťte následující příkaz:
Tento příkaz využívá nástroj EF Core pro generování nové migrace, která je pojmenována IdentityModels. Jakmile se migrace vytvoří, v adresáři aplikace ve složce Migrations nalezneme nové třídy migrací, které obsahují logiku potřebnou pro přidání tabulek souvisejících s ASP.NET Core Identity.
Pro aplikování těchto změn na databázi použijeme příkaz:
Tento příkaz zkontroluje dostupné migrace, analyzuje historii migrací uloženou v tabulce dbo.EFMigrationsHistory a na základě těchto informací provede potřebné změny v databázi, včetně vytvoření tabulek pro správnou funkci ASP.NET Core Identity.
Po provedení této migrace se v databázi objeví nové tabulky, které jsou součástí modelu Identity. Tímto způsobem máme kompletní základ pro správu uživatelských účtů, autentifikaci a autorizaci v aplikaci.
Přidání služeb ASP.NET Core Identity a nastavení autorizace
Nyní, když máme základní tabulky Identity v databázi, je čas přidat služby pro autorizaci a autentifikaci do kontejneru závislostí aplikace. To se provádí v souboru Program.cs, kde musíme provést následující kroky:
-
Přidat požadovaný prostor názvů pro Identity, konkrétně
using Microsoft.AspNetCore.Identity;. -
Přidat autentifikační služby, které zajišťují identifikaci uživatelů, a nastavit metodu autentifikace. Pro tento příklad použijeme Bearer tokeny:
-
Přidat služby autorizace do kontejneru závislostí:
-
Přidat konfigurační služby pro práci s databází a modely Identity prostřednictvím Entity Framework Core:
-
Namapovat endpointy pro Identity:
-
Přidat middleware pro ověření autentifikace a autorizace uživatelů v request pipeline:
Tímto způsobem jsme přidali potřebné služby pro autentifikaci a autorizaci a nakonfigurovali je tak, aby fungovaly správně v našem aplikačním kontextu. Tento krok je klíčový pro zajištění bezpečnosti aplikace a pro správné fungování mechanismu přístupu k chráněným zdrojům.
Tato konfigurace nám nyní umožňuje efektivně spravovat uživatelské účty, autentifikaci a autorizaci v rámci aplikace, což je nezbytné pro všechny aplikace, které vyžadují bezpečný přístup a ochranu osobních údajů.
Pro správnou implementaci je však důležité dbát na několik dalších aspektů. Kromě samotného nastavení ASP.NET Core Identity je třeba zajistit také správnou ochranu citlivých údajů, například pomocí šifrování dat nebo zabezpečení připojení k databázi. Také by měla být pečlivě monitorována bezpečnostní politika, včetně správného nastavení pravidel pro hesla a správu uživatelských práv.
Jak přejít na cloud-native vývoj a co je nutné chápat při práci s cloudem
Cloud computing je dnes nezbytnou součástí každé inovace v technologickém světě. Každý rok přináší nové možnosti a nástroje, které usnadňují organizacím nabídnout uživatelům kvalitní služby. A přestože již existují silné nástroje, vzory a osvědčené postupy pro práci s cloudovými prostředími, otázka, zda aplikace, postavené podle těchto standardů, skutečně využívají všechny výhody, které cloud nabízí, stále zůstává otevřená. Pro mnoho organizací je totiž přechod na cloud složitým krokem.
Tradičně většina organizací provozovala své aplikace v soukromých prostředích (on-premises), což mělo své výhody, jako je například větší kontrola nad bezpečností a soukromí dat. Na druhé straně však tento přístup přinášel i omezenou škálovatelnost, vysoké náklady na serverové vybavení a kvalifikovaný personál potřebný k údržbě systému. V tomto kontextu se objevuje cloud computing jako alternativní model, který zvyšuje výpočetní kapacitu, ale zároveň přináší nové výzvy, včetně přizpůsobení vývojových procesů.
Před přechodem na cloud je nezbytné pochopit, jak cloud funguje, jaké služby nabízí, jaké investice jsou potřeba a jak aplikace přizpůsobit cloud-native modelu. Tímto začíná cesta k modernizaci a adaptaci na nové způsoby vývoje.
Služby cloudového prostředí: CapEx vs. OpEx
V kontextu cloudu je nezbytné pochopit dva základní ekonomické pojmy: Capital Expenditure (CapEx) a Operating Expenditure (OpEx). CapEx se vztahuje k jednorázovým investicím do fyzických aktiv, jako jsou servery, prostory pro jejich umístění, napájení a podobně. OpEx naopak označuje pravidelné provozní náklady, zahrnující například náklady na služby, energie, pronájmy, licence a mzdy.
Při přechodu na cloud dochází k zásadní změně: přechází se z modelu CapEx na OpEx. Co to znamená pro organizace? Předně to znamená nižší počáteční náklady na infrastrukturu, což je výhoda pro organizace, které nechtějí investovat do fyzického hardwaru. S cloudovými službami si totiž organizace platí pouze za služby, které skutečně využívají. Tato flexibilita přináší nejen úspory, ale i možnost pružně reagovat na změny v podnikání, bez nutnosti investic do nových serverů.
Přestože cloud poskytuje výhodu v podobě snadné škálovatelnosti a nižších provozních nákladů, přechod na cloud je potřeba pečlivě naplánovat. Uplatnění modelu "pay-as-you-go" znamená, že náklady se mohou rychle zvýšit, pokud není efektivně spravováno, co a jak se využívá.
Typy cloudových služeb: IaaS, PaaS, SaaS
Když přemýšlíme o tom, jaký model služby zvolit pro svou organizaci, musíme rozumět třem základním typům cloudových služeb: IaaS (Infrastructure as a Service), PaaS (Platform as a Service) a SaaS (Software as a Service).
-
IaaS (Infrastructure as a Service): Tento model poskytuje virtualizované výpočetní zdroje, jako jsou virtuální stroje, úložiště a síťové služby. Je obvyklou volbou pro organizace, které migrují své aplikace z on-premises prostředí na cloud.
-
PaaS (Platform as a Service): PaaS poskytuje platformu, která abstrahuje infrastrukturu a umožňuje vývojářům soustředit se na vývoj aplikací a dat. Příkladem je využití Azure App Service k nasazení aplikace, jak bylo ukázáno v předchozích kapitolách.
-
SaaS (Software as a Service): SaaS poskytuje aplikace formou předplatného, jako jsou streamingové služby nebo Microsoft 365.
Každý z těchto modelů je důležitý pro vývoj v cloudovém prostředí, přičemž volba závisí na konkrétních potřebách organizace a požadavcích na škálovatelnost, flexibilitu a náklady.
Cloud-native přístup: Jak přizpůsobit vývoj aplikací pro cloud
Pro správnou adaptaci na cloud-native vývoj je zásadní nejen porozumět různým typům služeb, ale i osvojit si osvědčené postupy. Společnost Microsoft nabízí rozsáhlou dokumentaci a nástroje, které usnadňují práci s cloudovými prostředími, přičemž jejich frameworky jako Cloud Adoption Framework (CAF) a Well-Architected Framework (WAF) jsou klíčové pro správné nasazení cloudových aplikací.
Cloud Adoption Framework (CAF) je soubor nástrojů a dokumentace, který pomáhá organizacím v plánování a realizaci cloudové strategie. Skládá se ze sedmi fází, od definování byznysové strategie, přes plánování a migraci až po správu a provoz cloudových prostředí.
Každý z těchto kroků vyžaduje pečlivou přípravu a odpovědné řízení, aby bylo možné plně využít výhod cloudu. Tato metodika poskytuje praktické nástroje pro efektivní přechod na cloud a zajištění dlouhodobé udržitelnosti a inovace.
Přechod na cloud-native vývoj tedy není pouze o technologických změnách. Je to přechod na nový způsob myšlení a práce, který vyžaduje porozumění novým modelům financování, správě infrastruktury a přizpůsobení se neustále se měnícím podmínkám v podnikání.
Co je tedy důležité pro organizace, které se chtějí úspěšně přizpůsobit cloudu?
Prvním krokem je pochopit základy cloudových služeb a jejich ekonomických modelů. Následuje analýza potřeb organizace a rozhodnutí, zda se zaměřit na IaaS, PaaS nebo SaaS. Klíčové je také plánování cloudové adopce podle osvědčených rámců a best practices, které zajišťují efektivní přechod na cloudové prostředí. Bez pečlivého plánování, správného řízení nákladů a efektivního využívání cloudových nástrojů může přechod na cloudové služby znamenat nejen nevyužitý potenciál, ale i nečekané náklady.
Jak poznat, že mám problém se závislostí, a co s tím mohu dělat?
Jaký je význam a charakteristika „gentlemana špionů“ a proč je jeho role nenahraditelná?
Jaký osud čeká mustangy v Západní poušti?
Gonzo Governance: Digitální identita a její vliv na politiku během pandemie

Deutsch
Francais
Nederlands
Svenska
Norsk
Dansk
Suomi
Espanol
Italiano
Portugues
Magyar
Polski
Cestina
Русский