21 Flashcards
(6 cards)
Popište možnosti komunikace s databází v ASP.NET MVC/MVC Core
- ASP.NET Core framewok nabízí podporu pro velké množství databázových providerů (SQL Server, MySQL, PostgreSQL, Azure, Oracle DB). Databázového providera volíme v konfigurační části aplikace, v ASP.NET Core se jedná o třídu Startup a nastavení propojení s databází se provádí v metodě ConfigureServices(). Pro připojení k databázi je také nutný tzv. Connection string, který definuje připojení k databázi a nejčastěji se ukládá do appsettings.json souboru. Každý databázový provider má rozdílný formát connection stringu, ale v zásadě obsahuje zařízení/server na kterém databázový server běží, název databáze, se kterou se chceme spojit, popř. nějaké přihlašovací údaje k databázovému serveru.
Entity framework
- Je to framework zaměřený na objektově relační mapování (ORM). Minimalizuje anebo úplně odstraňuje nutnost psát přímý SQL kód pro přístup k datům. Místo toho nabízí práci s daty za pomoci LINQ metod nebo jiných metod pracujících s kolekcemi. Zrychluje podstatně implementaci základních CRUD (Create, Read, Update, Delete) operací nad tabulkami databáze.
- Umožňuje tedy namapovat databázové tabulky na .NET modely, včetně jejich referencí na další modely. Přístup k datům je prováděn na základě třídy, která se skládá z Entit a kontextu. Kontext reprezentuje propojení s databází a Entity jsou modely seskupené do DbSet kolekcí. Mapování probíhá standardně na základě shody názvu sloupce a názvem property v příslušném modelu. Tabulky pak mají název stejně jako Entita typu DbSet.
- Je možné implementovat code first i database first přístupem. Při Code first přístupu se modely dají konfigurovat pomocí DataAnnotations knihovny a nebo lze mapování konfigurovat v metodě OnModelCreating()
- Dotazy lze provádět pomocí jazyka LINQ nebo lambda výrazů, ale lze je psat i manuálně jako přímý SQL kód
- Podporuje Eager loading (závislá data jsou načtena z databáze jako součást dotazu), Explicit loading (závislá data jsou explicitně načtena z databáze v pozdějším čase), Lazy loading (závislá data jsou načtena až ve chvíli, kdy probíhá přístup k dané property)
- Využívá se zde Migrací, které slouží ke synchronizaci dat modelů a databáze (aktualizuje se tak schéma databáze aniž by se ztratily data, což je v produkci velmi důležité)
- Je možný také Seeding dat, což je naplnění databáze nějakými počátečními daty při spuštění migrace
database first a codefirst
- Database first = Nejdříve vytvoříme databázi, tabulky a vazmi mezi nimi a z té potom reverzně sestrojíme modely. Tento přístup je preferovaný pro velké aplikace založené na práci s daty, nevýhodou ale pak je, že při změně struktury databáze je nutné upravit i modely v aplikaci.
- Code first = Nejdříve se vytvoří modely v kódu aplikace, zde se vydefinují např. pomocí DataAnotations knihovny specifika pro jednotlivé sloupce, která properta má být primární klíč, cizí klíč atd. a následně jsou z těchto modelů vygenerovány tabulky.
LINQ
- Language Integrated Query (syntaktické a funkční rozšíření frameworku .NET) není sám o sobě formou přístupu k databázi, ale často se používá na jednodušší zpracování/filtraci dat, které proudí z/do databáze.
- Umožňuje pokročilé možnosti selekce či modifikace objektů v rámci kolekce.
- Je to jednotná syntaxe pro přístup k datům bez ohledu na jejich zdroj (databáze, objekt v paměti, XML), tedy stejný příkaz bude fungovat pro jakoukoliv z těchto kolekcí
- Umožňuje jednodušší realizaci DB konceptů, jako je například funkcionalita ekvivalentní ke klíčovým slovům „GROUP BY“ či „ORDER BY“. LINQ v mnohých metodách používá svoji syntax realizovanou buď pomocí lambda výrazů či syntaxy značně podobnou jazyku SQL.
ADO.NET
- Je to knihovna obsahující třídy pro přístup k datům a tvorbu databázových aplikací. Je přímo integrovaná v .NET Frameworku a zprostředkovává přístup k relačním, XML a aplikačním datům. Mezi výhody patří především jednoduchý způsob použití a rychlost při zpracování dat, může také přistupovat k nerelačním zdrojům dat.
- Konceptuálně se dělí na konzumenty a poskytovatele dat. Konzumenti jsou aplikace, které potřebují přístup k datům a poskytovatelé jsou třídy, které poskytují data konzumentům.
- Je to knihovna obsahující třídy pro přístup k datům a tvorbu databázových aplikací. Je přímo integrovaná v .NET Frameworku a zprostředkovává přístup k relačním, XML a aplikačním datům. Mezi výhody patří především jednoduchý způsob použití a rychlost při zpracování dat, může také přistupovat k nerelačním zdrojům dat.
- Konceptuálně se dělí na konzumenty a poskytovatele dat. Konzumenti jsou aplikace, které potřebují přístup k datům a poskytovatelé jsou třídy, které poskytují data konzumentům.
XML HTTP Request
- XML http Request je objekt pomocí kterého lze zaslat data na server bez nutnosti přenačtení stránky. Využívá se v AJAX programování (asynchronním programování).
- Podporuje nejen XML, ale i další formáty (XML, JSON, HTTP, File)
- Jelikož je request asynchronní, tak se využívá tzv. Promises, což jsou objekty reprezentující právě vykonávanou akci a její eventuální dokončení (ať už úspěšné nebo neúspěšné). Na promise navazujeme callback funkci, která zabezpečuje pak další obsluhu v závislosti na response serveru. Standardně je promise splněný, když dorazí odpověd od serveru, ať už je jakákoliv.
- Možné využít množství přístupů: String (přímo v query), FormData (při submitování formuláře), Blob, BufferSource. Pro GET dotazy je preferovaný string, pro POST pak JSON struktura.
- Je zde nutné nastavit headery pro příslušné typy zasílaných dat.
jQuery AJAX
- Na pozadí se volá XML http Request, santaxe je však příjemnější a umožňuje specifikaci vlastností volání prostřednictvím vlastností objektu, nastavuje headery charakterizující zasílaná data automaticky.
- Různé frontendové frameworky pak využívají HttpClient, který obdobně poskytuje příjemnější syntaxi pro zasílání HTTP požadavků na server. HttpClient využívá na pozadí Fetch API. Fetch je nativní prohlížečové API obsažené v JavaScriptu pro zasílání HTTP requestů, je to ideální náhrada za XMLHttpRequest, je jednodušší, využívá promise místo callback funkcí.