Lekce 8 - Scaffolding a Entity Framework v ASP.NET MVC
V minulé lekci, Úprava template MVC v ASP.NET, jsme si upravili předgenerovaný projekt z Visual Studia do podoby osobního blogu.
Dnešní C# .NET tutoriál bude nabitý nejmodernějšími technologiemi, pomocí kterých vytvoříme během okamžiku administraci článků na blogu.
Scaffolding
Webové frameworky jsou koncipované tak, aby co nejvíce zjednodušily práci programátora a zejména zredukovaly množství kódu, které musí napsat. Ačkoli se jim to daří, tak stále existují situace, kde je určité množství stereotypního kódu nutné a neexistuje způsob, jakým by ho framework mohl nahradit.
Chystáme se programovat administraci článků na webu a proto budeme potřebovat nějaký kontroler, model článku, databázovou tabulku a 5 pohledů (výpis, editace, přidání, odstranění, detail). Tyto součásti aplikace jednoduše musí obsahovat a nezáleží na tom, v jak geniálním jazyce ji programujeme. Nemusí je však stereotypně psát programátor, ale může je za nás vygenerovat IDE. Tomuto principu se říká scaffolding (nejlepší překlad je asi kostra). Visual Studio nám jednoduše předgeneruje databázi, kontroler a pohledy. Získáme tak kostru se základní funkčností, kterou pouze upravíme.
Entity framework
S databází budeme pracovat pomocí technologie Entity Framework, což je tzv. ORM (objektově-relační mapování). Databázové tabulky se přímo mapují na C# třídy, v kódu pracujeme jen s objekty a framework sám na pozadí generuje SQL dotazy. S jazykem SQL vůbec nepřijdeme do styku a naše aplikace je 100% objektová. Ačkoli se budu snažit vše podrobně popisovat, doporučím nováčkům na poli ORM návštěvu sekce Databáze v C# .NET, kde je ORM popsané podrobněji.
Code First a Database First přístupy
S Entity Frameworkem můžeme pracovat dvěma způsoby. Můžeme vytvořit C# třídu a EF nám podle ní automaticky vygeneruje databázovou tabulku a potřebný kontext. Tomuto přístupu se říká Code First. Druhý způsob spočívá v založení databáze, ze které nám EF vygeneruje třídy a kontext. Asi vás nepřekvapí, že se druhý přístup jmenuje Database First. Jelikož vytvořit třídu je mnohem jednodušší než vytvořit databázi, zvolil jsem pro tutoriál přístup Code-First.
Vytvoření modelu
Protože entity framework používá určité konvence a převádí názvy tříd do množného čísla, budeme aplikaci psát anglicky, aby názvy nebyly zkomolené. Do složky Models si tedy přidejme novou třídu Article. Bude vypadat takto:
public class Article { public int Id { get; set; } public string Content { get; set; } public string Title { get; set; } public string Description { get; set; } }
Třída obsahuje několik vlastností, konkrétně id, obsah, titulek a popisek. Můžete si k článku přidat např. ještě klíčová slova, datum publikace a podobně. Id musí mít každá entita, až z kódu vygenerujeme tabulky, tak se stane jejím primárním klíčem, který bude články jednoznačně odlišovat i kdyby měly třeba stejný titulek.
Rebuild
Aby uměl Entity Framework databázi vygenerovat, musíme projekt rebuildnout, jelikož ještě nebyl s touto třídou sestaven. Toho dosáhneme kliknutím pravým na projekt v Solution Exploreru a výběrem možnosti Rebuild. Třída se tím zkompiluje.
Nyní si přidáme nový kontroler. Zobrazí se nám dialog s výběrem Scaffoldu, kde zvolíme MVC Controller with views, using Entity Framework.
Jako název kontroleru zvolíme ArticleController, jako model zvolíme naši třídu Article a jako datový kontext vybereme již existující kontext aplikace, ve kterém jsou uživatelé a jejich role.
Dialog potvrdíme.
Byl nám vygenerován ArticleController s několika metodami (akcemi). Nalezneme zde akce:
- Index - Výpis všech článků
- Details - Výpis jednoho článku
- Create - Vytvoření článku
- Edit - Editace článku
- Delete - Odstranění článku
Když se podíváme do složky Views, nalezneme zde složku Article a v ní 5 pohledů pro tyto akce.
Aplikaci nyní spustíme a přejdeme na záložku Články:
Aplikaci zastavme a přejděme do Server Exploreru, kde mezi Data Connections nalezneme naše připojení k databázi. Mezi databázovými tabulkami aplikace nalezneme Articles:
Když si ji rozklikneme, má následující strukturu:
Toto všechno se vygenerovalo opravdu jen na základě toho, že jsme do aplikace přidali třídu Article s několika vlastnostmi.
Můžeme si aplikaci zkusit znovu spustit a přidat nějaký testovací článek:
Zobrazí se nám v seznamu článků:
A můžeme si ho také otevřít pomocí metody Details:
Všimněte si URL adresy:
http://localhost:52220/Article/Details/1
První parametr označuje název kontroleru, který se má spustit (Article), druhý je název jeho metody (Details). V předchozích aplikacích jsme měli v kontroleru vždy jen jednu metodu (Index) a ta se spustí automaticky, když žádný parametr nezadáme. Další parametry jsou parametry dané akce (metody) v kontroleru, zde se jedná o ID článku, který zobrazujeme.
Mechanismu, který převádí URL adresu na volání metod kontroleru se říká routování. Jeho nastavení můžeme měnit (ačkoli to asi nikdy dělat nebudeme) a naleznete ho App_Start/RouteConfig.cs.
Metoda details v ArticleController vypadá 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ý parametr id je jako obyčejný parametr metody. Získání článku z databáze má na svědomí opravdu jen tento řádek:
Article article = db.Articles.Find(id);
Pokud jste Entity Framework neznali, tak ho nyní asi budete milovat
Zkuste si pročíst zdrojový kód dnešního řešení a zopakovat si ještě jak vše funguje.
V příští lekci, Úprava administrace článků a editor v ASP.NET MVC, začneme scaffoldovaný kód upravovat tak, aby se články přiblížily nějaké naší představě. Projekt je jako vždy níže ke stažení.
Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 516x (21.47 MB)
Aplikace je včetně zdrojových kódů v jazyce C#