6. diel - Scaffolding a Entity Framework v ASP.NET MVC
V minulej lekcii, Úprava template MVC v ASP.NET , sme si upravili předgenerovaný projekt z Visual Studia do podoby osobného blogu. Dnešné C# .NET tutoriál bude nabitý najmodernejšími technológiami, pomocou ktorých vytvoríme behom okamihu administráciu článkov na blogu.
Scaffolding
Webové frameworky sú koncipované tak, aby čo najviac zjednodušili prácu programátora a najmä zredukovali množstvo kódu, ktoré musí napísať. Hoci sa im to darí, tak stále existujú situácie, kde je určité množstvo stereotypného kódu nutné a neexistuje spôsob, akým by ho framework mohol nahradiť.
Chystáme sa programovať administráciu článkov na webe a preto budeme potrebovať nejaký kontrolér, model článku, databázovú tabuľku a 5 pohľadov (výpis, editácia, pridanie, odstránenie, detail). Tieto súčasti aplikácie jednoducho musí obsahovať a nezáleží na tom, v ako geniálnym jazyku ju programujeme. Nemusí je však stereotypne písať programátor, ale môže ich za nás vygenerovať IDE. Tomuto princípu sa hovorí scaffolding (najlepší preklad je asi kostra). Visual Studio nám jednoducho předgeneruje databázu, kontrolér a pohľady. Získame tak kostru so základnou funkčnosťou, ktorú len upravíme.
Entity framework
S databázou budeme pracovať pomocou technológie Entity Framework, čo je tzv. ORM (objektovo-relačné mapovanie). Databázovej tabuľky sa priamo mapujú na C# triedy, v kóde pracujeme len s objektmi a framework sám na pozadí generuje SQL dotazy. S jazykom SQL vôbec neprídeme do styku a naše aplikácie je 100% objektová. Hoci sa budem snažiť všetko podrobne popisovať, odporučím nováčikom na poli ORM návštevu sekcie Databáza v C# .NET, kde je ORM popísané podrobnejšie.
Code First a Database First prístupy
S Entity Framework môžeme pracovať dvoma spôsobmi. Môžeme vytvoriť C# triedu a EF nám podľa nej automaticky vygeneruje databázovú tabuľku a potrebný kontext. Tomuto prístupu sa hovorí Code First. Druhý spôsob spočíva v založenia databázy, z ktorej nám EF vygeneruje triedy a kontext. Asi vás neprekvapí, že sa druhý prístup volá Database First. Keďže vytvoriť triedu je oveľa jednoduchšie ako vytvoriť databázu, zvolil som pre tutoriál prístup Code-First.
Vytvorenie modelu
Pretože entity framework používa určité konvencie a prevádza názvy tried do množného čísla, budeme aplikáciu písať anglicky, aby názvy neboli skomolené. Do zložky Models si teda pridajme novú triedu Article. Bude vyzerať takto:
public class Article { public int Id { get; set; } public string Content { get; set; } public string Title { get; set; } public string Description { get; set; } }
Trieda obsahuje niekoľko vlastností, konkrétne id, obsah, titulok a popisok. Môžete si k článku pridať napr. Ešte kľúčové slová, dátum publikácie a podobne. Id musí mať každá entita, až z kódu vygenerujeme tabuľky, tak sa stane jej primárnym kľúčom, ktorý bude články jednoznačne odlišovať aj keby mali potrebné rovnaký titulok.
Rebuild
Aby vedel Entity Framework databázu vygenerovať, musíme projekt rebuildnout, pretože ešte nebol s touto triedou zostavený. To dosiahneme kliknutím pravým na projekt v Solution Exploreri a výberom možnosti Rebuild. Trieda sa tým skompiluje.
Teraz si pridáme nový kontrolér. Zobrazí sa nám dialóg s výberom SCAFFOLD, kde zvolíme MVC Controller with views, using Entity Framework.
Ako názov kontroleru zvolíme ArticleController, ako model zvolíme našu triedu Article a ako dátový kontext vyberieme už existujúce kontext aplikácie, v ktorom sú užívatelia a ich úloha.
Dialóg potvrdíme.
Bol nám vygenerovaný ArticleController s niekoľkými metódami (akciami). Nájdeme tu akcie:
- Index - Výpis všetkých článkov
- Details - Výpis jedného článku
- Create - Vytvorenie článku
- Edit - Editácia článku
- Delete - Odstránenie článku
Keď sa pozrieme do zložky Views, nájdeme tu zložku Article a v nej 5 pohľadov pre tieto akcie.
Aplikáciu teraz spustíme a prejdeme na záložku Články:
Aplikáciu zastavme a prejdime do Server Exploreru, kde medzi Data Connections nájdeme naše pripojenie k databáze. Medzi databázovými tabuľkami aplikácie nájdeme Articles:
Keď si ju rozkliknite, má nasledujúcu štruktúru:
Toto všetko sa vygenerovalo naozaj len na základe toho, že sme do aplikácie pridali triedu Article s niekoľkými vlastnosťami.
Môžeme si aplikáciu skúsiť znovu spustiť a pridať nejaký testovací článok:
Zobrazí sa nám v zozname článkov:
A môžeme si ho tiež otvoriť pomocou metódy Details:
Všimnite si URL adresy:
http://localhost:52220/Article/Details/1
Prvý parameter označuje názov kontroleru, ktorý sa má spustiť (Article), druhý je názov jeho metódy (Details). V predchádzajúcich aplikáciách sme mali v kontroleru vždy iba jednu metódu (Index) a tá sa spustí automaticky, keď žiadny parameter nezadáme. Ďalšie parametre sú parametre danej akcie (metódy) v kontroleru, tu sa jedná o ID článku, ktorý zobrazujeme.
Mechanizmu, ktorý prevádza URL adresu na volanie metód kontroléra sa hovorí routovanie. Jeho nastavenie môžeme meniť (hoci to asi nikdy robiť nebudeme) a nájdete ho App_Start / RouteConfig.cs.
Metóda details v ArticleController vyzerá takto:
// GET: /Article/Details/5 public ActionResult Details(int? id) { if (id == null) { return new HttpStatusCodeResult(HttpStatusCode.BadRequest); } Article article = db.Articles.Find(id); if (article == null) { return HttpNotFound(); } return View(article); }
Nullovatelný parameter id je ako obyčajný parameter metódy. Získanie článku z databázy má na svedomí naozaj len tento riadok:
Article article = db.Articles.Find(id);
Ak ste Entity Framework nepoznali, tak ho teraz asi budete milovať
Skúste si prečítať zdrojový kód dnešného riešenia a zopakovať si ešte ako všetko funguje. V budúcej lekcii, Úprava administrácie článkov a editor v ASP.NET MVC , začneme scaffoldovaný kód upravovať tak, aby sa články priblížili nejakej našej predstave. Projekt je ako vždy nižšie k stiahnutiu.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 516x (21.47 MB)
Aplikácia je vrátane zdrojových kódov v jazyku C#