Kurz: Začínáme s Entity Framework 6 Code First pomocí MVC 5

Poznámka

Pro nový vývoj doporučujeme ASP.NET Core Razor Pages před ASP.NET kontrolery a zobrazeními MVC. Podobnou řadu kurzů s využitím razor Pages najdete v tématu Kurz: Začínáme s Razor Pages v ASP.NET Core. Nový kurz:

  • Je snazší ho sledovat.
  • Poskytuje další osvědčené postupy EF Core.
  • Používá efektivnější dotazy.
  • Je aktuální s nejnovějším rozhraním API.
  • Zahrnuje další funkce.
  • Je upřednostňovaný přístup pro vývoj nových aplikací.

V této sérii kurzů se naučíte vytvořit aplikaci ASP.NET MVC 5, která pro přístup k datům používá Entity Framework 6. V tomto kurzu se používá pracovní postup Code First. Informace o tom, jak si vybrat mezi kódy Code First, Database First a Model First, najdete v tématu Vytvoření modelu.

Tato série kurzů vysvětluje, jak sestavit ukázkovou aplikaci Contoso University. Ukázková aplikace je jednoduchý univerzitní web. Díky tomu můžete zobrazit a aktualizovat informace o studentech, kurzech a instruktorech. Tady jsou dvě obrazovky, které vytvoříte:

Students_Index_page

Upravit studenta

V tomto kurzu jste:

  • Vytvoření webové aplikace MVC
  • Nastavení stylu webu
  • Instalace Entity Frameworku 6
  • Vytvoření datového modelu
  • Vytvoření kontextu databáze
  • Inicializace databáze pomocí testovacích dat
  • Nastavení EF 6 pro použití LocalDB
  • Vytvoření kontroleru a zobrazení
  • Zobrazení databáze

Požadavky

Vytvoření webové aplikace MVC

  1. Otevřete Visual Studio a vytvořte webový projekt jazyka C# pomocí šablony ASP.NET Web Application (.NET Framework). Pojmenujte projekt ContosoUniversity a vyberte OK.

    Dialogové okno Nový projekt v sadě Visual Studio

  2. V části Nová webová aplikace ASP.NET – ContosoUniversity vyberte MVC.

    Dialogové okno Nová webová aplikace v sadě Visual Studio

    Poznámka

    Ve výchozím nastavení je možnost Ověřování nastavená na Bez ověřování. Pro účely tohoto kurzu webová aplikace nevyžaduje, aby se uživatelé přihlásili. Navíc neomezuje přístup na základě toho, kdo je přihlášený.

  3. Vyberte OK a vytvořte projekt.

Nastavení stylu webu

Několik jednoduchých změn nastaví nabídku webu, rozložení a domovskou stránku.

  1. Otevřete Views\Shared\_Layout.cshtml a proveďte následující změny:

    • Změňte každý výskyt "Moje aplikace ASP.NET" a "Název aplikace" na "Contoso University".
    • Přidejte položky nabídky pro studenty, kurzy, instruktory a oddělení a odstraňte položku Kontakt.

    Změny jsou zvýrazněné v následujícím fragmentu kódu:

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>@ViewBag.Title - Contoso University</title>
        @Styles.Render("~/Content/css")
        @Scripts.Render("~/bundles/modernizr")
    </head>
    <body>
        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="navbar-inner">
                <div class="container">
                    <button type="button" class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    @Html.ActionLink("Contoso University", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
                    <div class="nav-collapse collapse">
                        <ul class="nav">
                            <li>@Html.ActionLink("Home", "Index", "Home")</li>
                            <li>@Html.ActionLink("About", "About", "Home")</li>
                            <li>@Html.ActionLink("Students", "Index", "Student")</li>
                            <li>@Html.ActionLink("Courses", "Index", "Course")</li>
                            <li>@Html.ActionLink("Instructors", "Index", "Instructor")</li>
                            <li>@Html.ActionLink("Departments", "Index", "Department")</li>
                        </ul>
                    </div>
                </div>
            </div>
        </div>
    
        <div class="container">
            @RenderBody()
            <hr />
            <footer>
                <p>&copy; @DateTime.Now.Year - Contoso University</p>
            </footer>
        </div>
    
        @Scripts.Render("~/bundles/jquery")
        @Scripts.Render("~/bundles/bootstrap")
        @RenderSection("scripts", required: false)
    </body>
    </html>
    
  2. V souboru Views\Home\Index.cshtml nahraďte obsah souboru následujícím kódem, který nahradí text o ASP.NET a MVC textem o této aplikaci:

    @{
        ViewBag.Title = "Home Page";
    }
    
    <div class="jumbotron">
        <h1>Contoso University</h1>
    </div>
    <div class="row">
        <div class="col-md-4">
            <h2>Welcome to Contoso University</h2>
            <p>Contoso University is a sample application that
            demonstrates how to use Entity Framework 6 in an 
            ASP.NET MVC 5 web application.</p>
        </div>
        <div class="col-md-4">
            <h2>Build it from scratch</h2>
            <p>You can build the application by following the steps in the tutorial series on the ASP.NET site.</p>
            <p><a class="btn btn-default" href="http://www.asp.net/mvc/tutorials/getting-started-with-ef-using-mvc/">See the tutorial &raquo;</a></p>
        </div>
        <div class="col-md-4">
            <h2>Download it</h2>
            <p>You can download the completed project.</p>
            <p><a class="btn btn-default" href="https://webpifeed.blob.core.windows.net/webpifeed/Partners/ASP.NET%20MVC%20Application%20Using%20Entity%20Framework%20Code%20First.zip">Download &raquo;</a></p>
        </div>
    </div>
    
  3. Stisknutím kombinace kláves Ctrl+F5 spusťte web. Zobrazí se domovská stránka s hlavní nabídkou.

Instalace Entity Frameworku 6

  1. V nabídce Nástroje zvolte Správce balíčků NuGet a pak zvolte Konzola Správce balíčků.

  2. V okně konzoly Správce balíčků zadejte následující příkaz:

    Install-Package EntityFramework
    

Tento krok je jedním z několika kroků, které jste v tomto kurzu provedli ručně, ale mohl být proveden automaticky funkcí generování ASP.NET MVC. Provádíte je ručně, abyste viděli kroky potřebné k použití Entity Frameworku (EF). Později použijete generování uživatelského rozhraní k vytvoření kontroleru A zobrazení MVC. Alternativou je nechat generování automaticky nainstalovat balíček NuGet EF, vytvořit třídu kontextu databáze a vytvořit připojovací řetězec. Až budete připravení to udělat tímto způsobem, stačí tyto kroky přeskočit a po vytvoření tříd entit vygenerovat kontroler MVC.

Vytvoření datového modelu

Dále vytvoříte třídy entit pro aplikaci Contoso University. Začnete s následujícími třemi entitami:

Kurz<->Enrollment-Student<>

Entity Relace
Kurz k registraci 1:N
Od studenta k registraci 1:N

Mezi entitami a Enrollment existuje relace Student 1:N a mezi Course entitami a Enrollment existuje relace 1:N. Jinými slovy, student může být zapsán do libovolného počtu kurzů a kurz může mít libovolný počet studentů.

V následujících částech vytvoříte třídu pro každou z těchto entit.

Poznámka

Pokud se před vytvořením všech těchto tříd entit pokusíte projekt zkompilovat, zobrazí se chyby kompilátoru.

Entita Student

  • Ve složce Models (Modely) vytvořte soubor třídy Student.cs tak, že kliknete pravým tlačítkem na složku v Průzkumník řešení a zvolíte Přidat>třídu. Nahraďte kód šablony následujícím kódem:

    using System;
    using System.Collections.Generic;
    
    namespace ContosoUniversity.Models
    {
        public class Student
        {
            public int ID { get; set; }
            public string LastName { get; set; }
            public string FirstMidName { get; set; }
            public DateTime EnrollmentDate { get; set; }
            
            public virtual ICollection<Enrollment> Enrollments { get; set; }
        }
    }
    

Vlastnost ID se stane sloupcem primárního klíče databázové tabulky, která odpovídá této třídě. Ve výchozím nastavení Entity Framework interpretuje vlastnost s názvem ID nebo classnameID jako primární klíč.

Vlastnost Enrollments je navigační vlastnost. Navigační vlastnosti obsahují další entity, které s touto entitou souvisejí. V tomto případě Enrollments bude vlastnost Student entity obsahovat všechny Enrollment entity, které s touto Student entitou souvisejí. Jinými slovy, pokud má daný Student řádek v databázi dva související Enrollment řádky (řádky, které obsahují hodnotu primárního klíče daného studenta Enrollments ve StudentID sloupci cizího klíče), Student bude navigační vlastnost této entity obsahovat tyto dvě Enrollment entity.

Vlastnosti navigace jsou obvykle definovány tak virtual , aby mohly využívat určité funkce Entity Frameworku, jako je opožděné načítání. (Opožděné načítání bude vysvětleno později v kurzu Čtení souvisejících dat dále v této sérii.)

Pokud navigační vlastnost může obsahovat více entit (například v relacích M:N nebo 1:N), musí být jejím typem seznam, ve kterém lze přidávat, odstraňovat a aktualizovat položky, například ICollection.

Entita Registrace

  • Ve složce Models (Modely ) vytvořte Enrollment.cs a nahraďte existující kód následujícím kódem:

    namespace ContosoUniversity.Models
    {
        public enum Grade
        {
            A, B, C, D, F
        }
    
        public class Enrollment
        {
            public int EnrollmentID { get; set; }
            public int CourseID { get; set; }
            public int StudentID { get; set; }
            public Grade? Grade { get; set; }
            
            public virtual Course Course { get; set; }
            public virtual Student Student { get; set; }
        }
    }
    

Vlastnost EnrollmentID bude primárním klíčem. Tato entita místo sebe používá vzor IDclassnameID, jak jste viděli v entitěStudent. Obvykle byste zvolili jeden vzor a použili ho v celém datovém modelu. V této variantě je vidět, že můžete použít oba vzory. V pozdějším kurzu se dozvíte, jak použití ID bez classname usnadňuje implementaci dědičnosti v datovém modelu.

Vlastnost Grade je výčet. Otazník za Grade deklarací typu označuje, že Grade vlastnost je null. Známka, která má hodnotu null, se liší od nulové známky – null znamená, že známka není známa nebo ještě nebyla přiřazena.

Vlastnost StudentID je cizí klíč a odpovídající navigační vlastnost je Student. Entita Enrollment je přidružená k jedné Student entitě, takže vlastnost může obsahovat pouze jednu Student entitu (na rozdíl od Student.Enrollments navigační vlastnosti, kterou jste viděli dříve, která může obsahovat více Enrollment entit).

Vlastnost CourseID je cizí klíč a odpovídající navigační vlastnost je Course. Entita Enrollment je přidružená k jedné Course entitě.

Entity Framework interpretuje vlastnost jako vlastnost cizího klíče, pokud má název <navigační vlastnosti název><primárního> klíče (například pro Student vlastnost navigace, StudentID protože Student primární klíč entity je ID). Vlastnosti cizího klíče lze také pojmenovat stejným jednoduchým <názvem> vlastnosti primárního klíče (například proto, CourseID že Course primární klíč entity je CourseID).

Entita Kurz

  • Ve složce Models (Modely ) vytvořte Course.cs a nahraďte kód šablony následujícím kódem:

    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations.Schema;
    
    namespace ContosoUniversity.Models
    {
        public class Course
        {
            [DatabaseGenerated(DatabaseGeneratedOption.None)]
            public int CourseID { get; set; }
            public string Title { get; set; }
            public int Credits { get; set; }
            
            public virtual ICollection<Enrollment> Enrollments { get; set; }
        }
    }
    

Vlastnost Enrollments je navigační vlastnost. Entita Course může souviset s libovolným počtem Enrollment entit.

Další informace o atributu DatabaseGeneratedAttribute si řekneme v pozdějším kurzu v této sérii. Tento atribut v podstatě umožňuje zadat primární klíč pro kurz místo toho, aby ho vygenerovala databáze.

Vytvoření kontextu databáze

Hlavní třída, která koordinuje funkce Entity Framework pro daný datový model, je kontextová třída databáze . Tuto třídu vytvoříte odvozením z třídy System.Data.Entity.DbContext . V kódu určíte, které entity jsou součástí datového modelu. Můžete také přizpůsobit určité chování entity frameworku. V tomto projektu má třída název SchoolContext.

  • Pokud chcete vytvořit složku v projektu ContosoUniversity, klikněte pravým tlačítkem na projekt v Průzkumník řešení, klikněte na Přidat a pak klikněte na Nová složka. Pojmenujte novou složku DAL (pro Data Access Layer). V této složce vytvořte nový soubor třídy s názvem SchoolContext.cs a nahraďte kód šablony následujícím kódem:

    using ContosoUniversity.Models;
    using System.Data.Entity;
    using System.Data.Entity.ModelConfiguration.Conventions;
    
    namespace ContosoUniversity.DAL
    {
        public class SchoolContext : DbContext
        {
        
            public SchoolContext() : base("SchoolContext")
            {
            }
            
            public DbSet<Student> Students { get; set; }
            public DbSet<Enrollment> Enrollments { get; set; }
            public DbSet<Course> Courses { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
                modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
            }
        }
    }
    

Zadání sad entit

Tento kód vytvoří vlastnost DbSet pro každou sadu entit. V terminologii Entity Framework sada entit obvykle odpovídá databázové tabulce a entita odpovídá řádku v tabulce.

Poznámka

Příkazy a DbSet<Course> můžete vynechat DbSet<Enrollment> a fungují stejně. Entity Framework by je zahrnul implicitně, protože entita Student odkazuje na entitu Enrollment a entita Enrollment odkazuje na entitu Course .

Zadání připojovacího řetězce

Název připojovacího řetězce (který později přidáte do souboru Web.config) se předá konstruktoru.

public SchoolContext() : base("SchoolContext")
{
}

Můžete také předat samotný připojovací řetězec místo názvu, který je uložený v souboru Web.config. Další informace o možnostech určení databáze, která se má použít, najdete v tématu Připojovací řetězce a modely.

Pokud nezadáte připojovací řetězec nebo název explicitně, Entity Framework předpokládá, že název připojovacího řetězce je stejný jako název třídy. Výchozí název připojovacího řetězce v tomto příkladu by pak byl SchoolContextstejný, jaký explicitně zadáváte.

Zadání názvů tabulek s jednotným číslem

Příkaz modelBuilder.Conventions.Remove v metodě OnModelCreating brání v pluralizaci názvů tabulek. Pokud byste to neudělali, vygenerované tabulky v databázi by se jmenovaly Students, Coursesa Enrollments. Místo toho budou Studentnázvy tabulek , Coursea Enrollment. Vývojáři nesouhlasí s tím, jestli mají být názvy tabulek v množném čísle nebo ne. V tomto kurzu se používá jednotný formulář, ale důležité je, že můžete vybrat ten, který dáváte přednost zahrnutím nebo vynecháním tohoto řádku kódu.

Inicializace databáze pomocí testovacích dat

Entity Framework může automaticky vytvořit (nebo odstranit a znovu vytvořit) databázi při spuštění aplikace. Můžete určit, že se to má provést při každém spuštění aplikace nebo pouze v případě, že model není synchronizovaný s existující databází. Můžete také napsat metodu Seed , kterou Entity Framework automaticky volá po vytvoření databáze a naplní ji testovacími daty.

Výchozím chováním je vytvoření databáze pouze v případě, že neexistuje (a vyvolání výjimky, pokud se model změnil a databáze již existuje). V této části určíte, že databáze se má odstranit a znovu vytvořit při každé změně modelu. Vyřazení databáze způsobí ztrátu všech dat. To je obecně v pořádku během vývoje, protože Seed metoda se spustí při opětovném vytvoření databáze a znovu vytvoří testovací data. V produkčním prostředí ale obecně nechcete ztratit všechna data pokaždé, když potřebujete změnit schéma databáze. Později se dozvíte, jak zpracovávat změny modelu pomocí Migrace Code First ke změně schématu databáze místo odstranění a opětovného vytvoření databáze.

  1. Ve složce DAL vytvořte nový soubor třídy s názvem SchoolInitializer.cs a nahraďte kód šablony následujícím kódem, který v případě potřeby vytvoří databázi a načte do nové databáze testovací data.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.Entity;
    using ContosoUniversity.Models;
    
    namespace ContosoUniversity.DAL
    {
        public class SchoolInitializer : System.Data.Entity. DropCreateDatabaseIfModelChanges<SchoolContext>
        {
            protected override void Seed(SchoolContext context)
            {
                var students = new List<Student>
                {
                new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01")},
                new Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Arturo",LastName="Anand",EnrollmentDate=DateTime.Parse("2003-09-01")},
                new Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")},
                new Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse("2001-09-01")},
                new Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")},
                new Student{FirstMidName="Nino",LastName="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")}
                };
    
                students.ForEach(s => context.Students.Add(s));
                context.SaveChanges();
                var courses = new List<Course>
                {
                new Course{CourseID=1050,Title="Chemistry",Credits=3,},
                new Course{CourseID=4022,Title="Microeconomics",Credits=3,},
                new Course{CourseID=4041,Title="Macroeconomics",Credits=3,},
                new Course{CourseID=1045,Title="Calculus",Credits=4,},
                new Course{CourseID=3141,Title="Trigonometry",Credits=4,},
                new Course{CourseID=2021,Title="Composition",Credits=3,},
                new Course{CourseID=2042,Title="Literature",Credits=4,}
                };
                courses.ForEach(s => context.Courses.Add(s));
                context.SaveChanges();
                var enrollments = new List<Enrollment>
                {
                new Enrollment{StudentID=1,CourseID=1050,Grade=Grade.A},
                new Enrollment{StudentID=1,CourseID=4022,Grade=Grade.C},
                new Enrollment{StudentID=1,CourseID=4041,Grade=Grade.B},
                new Enrollment{StudentID=2,CourseID=1045,Grade=Grade.B},
                new Enrollment{StudentID=2,CourseID=3141,Grade=Grade.F},
                new Enrollment{StudentID=2,CourseID=2021,Grade=Grade.F},
                new Enrollment{StudentID=3,CourseID=1050},
                new Enrollment{StudentID=4,CourseID=1050,},
                new Enrollment{StudentID=4,CourseID=4022,Grade=Grade.F},
                new Enrollment{StudentID=5,CourseID=4041,Grade=Grade.C},
                new Enrollment{StudentID=6,CourseID=1045},
                new Enrollment{StudentID=7,CourseID=3141,Grade=Grade.A},
                };
                enrollments.ForEach(s => context.Enrollments.Add(s));
                context.SaveChanges();
            }
        }
    }
    

    Metoda Seed přebírá objekt kontextu databáze jako vstupní parametr a kód v metodě používá tento objekt k přidání nových entit do databáze. Pro každý typ entity kód vytvoří kolekci nových entit, přidá je do příslušné DbSet vlastnosti a pak uloží změny do databáze. Není nutné volat metodu SaveChanges po každé skupině entit, jak je to tady, ale to vám pomůže najít zdroj problému, pokud dojde k výjimce, když kód zapisuje do databáze.

  2. Pokud chcete, aby Entity Framework používal vaši třídu inicializátoru, přidejte do elementu entityFramework v souboru aplikaceWeb.config (ten v kořenové složce projektu), jak je znázorněno v následujícím příkladu:

    <entityFramework>
      <contexts>
        <context type="ContosoUniversity.DAL.SchoolContext, ContosoUniversity">
          <databaseInitializer type="ContosoUniversity.DAL.SchoolInitializer, ContosoUniversity" />
        </context>
      </contexts>
      <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
        <parameters>
          <parameter value="v11.0" />
        </parameters>
      </defaultConnectionFactory>
      <providers>
        <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
      </providers>
    </entityFramework>
    

    Určuje context type plně kvalifikovaný název třídy kontextu a sestavení, ve které je, a databaseinitializer type určuje plně kvalifikovaný název třídy inicializátoru a sestavení, ve které je. (Pokud nechcete, aby EF používal inicializátor, můžete u elementu context nastavit atribut: disableDatabaseInitialization="true".) Další informace najdete v tématu Nastavení konfiguračního souboru.

    Alternativou k nastavení inicializátoru v souboruWeb.config je to provést v kódu přidáním Database.SetInitializer příkazu do Application_Start metody v souboru Global.asax.cs . Další informace najdete v tématu Principy inicializátorů databáze v Entity Framework Code First.

Aplikace je teď nastavená tak, aby při prvním přístupu k databázi v daném spuštění aplikace entity Framework porovnávala databázi s modelem (vaše SchoolContext třídy a třídy entit). Pokud je rozdíl, aplikace se vyřazuje a znovu vytvoří databázi.

Poznámka

Když nasadíte aplikaci na produkční webový server, musíte odebrat nebo zakázat kód, který databázi odstraní a znovu vytvoří. Uděláte to v pozdějším kurzu v této sérii.

Nastavení EF 6 pro použití LocalDB

LocalDB je odlehčená verze databázového stroje SQL Server Express. Snadno se instaluje a konfiguruje, spouští se na vyžádání a spouští se v uživatelském režimu. LocalDB běží ve speciálním režimu spouštění SQL Server Express, který umožňuje pracovat s databázemi jako soubory .mdf. Pokud chcete mít možnost kopírovat databázi s projektem, můžete soubory databáze LocalDB umístit do složky App_Data webového projektu. Funkce instance uživatele v SQL Server Express také umožňuje pracovat se soubory .mdf, ale funkce instance uživatele je zastaralá. Proto se pro práci se soubory .mdf doporučuje LocalDB. LocalDB se ve výchozím nastavení instaluje se sadou Visual Studio.

SQL Server Express se obvykle nepoužívá pro produkční webové aplikace. Konkrétně localDB se nedoporučuje používat v produkčním prostředí s webovou aplikací, protože není navržený pro práci se službou IIS.

  • V tomto kurzu budete pracovat s LocalDB. Otevřete soubor aplikaceWeb.config a přidejte connectionStrings před element element appSettings , jak je znázorněno v následujícím příkladu. (Nezapomeňte aktualizovat souborWeb.config v kořenové složce projektu. V podsložce Views je také Web.config soubor, který nemusíte aktualizovat.)

    <connectionStrings>
        <add name="SchoolContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=ContosoUniversity1;Integrated Security=SSPI;" providerName="System.Data.SqlClient"/>
    </connectionStrings>
    <appSettings>
      <add key="webpages:Version" value="3.0.0.0" />
      <add key="webpages:Enabled" value="false" />
      <add key="ClientValidationEnabled" value="true" />
      <add key="UnobtrusiveJavaScriptEnabled" value="true" />
    </appSettings>
    

Připojovací řetězec, který jste přidali, určuje, že Entity Framework bude používat databázi LocalDB s názvem ContosoUniversity1.mdf. (Databáze ještě neexistuje, ale EF ji vytvoří.) Pokud chcete databázi vytvořit ve složce App_Data , můžete ji přidat AttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf do připojovacího řetězce. Další informace o připojovacích řetězcích najdete v tématu SQL Server Připojovací řetězce pro ASP.NET Web Applications.

Ve skutečnosti nepotřebujete připojovací řetězec v souboru Web.config . Pokud nezadáte připojovací řetězec, Entity Framework použije výchozí připojovací řetězec založený na třídě kontextu. Další informace najdete v tématu Code First to a New Database.For more information, see Code First to a New Database.

Vytvoření kontroleru a zobrazení

Teď vytvoříte webovou stránku pro zobrazení dat. Proces vyžádání dat automaticky aktivuje vytvoření databáze. Začnete vytvořením nového kontroleru. Než to ale uděláte, sestavte projekt tak, aby byly třídy modelu a kontextu dostupné pro generování řídicího rozhraní MVC.

  1. Klikněte pravým tlačítkem na složku Controllers v Průzkumník řešení, vyberte Přidat a potom klikněte na Nová vygenerovaná položka.

  2. V dialogovém okně Přidat generování uživatelského rozhraní vyberte Kontroler MVC 5 se zobrazeními pomocí Entity Frameworku a pak zvolte Přidat.

    Dialogové okno Přidat generování uživatelského rozhraní v sadě Visual Studio

  3. V dialogovém okně Přidat kontroler vyberte následující možnosti a pak zvolte Přidat:

    • Třída modelu: Student (ContosoUniversity.Models). (Pokud tuto možnost v rozevíracím seznamu nevidíte, sestavte projekt a zkuste to znovu.)

    • Třída kontextu dat: SchoolContext (ContosoUniversity.DAL).

    • Název kontroleru: StudentController (nikoli StudentsController).

    • Ponechte výchozí hodnoty pro ostatní pole.

      Když kliknete na Přidat, scaffolder vytvoří soubor StudentController.cs a sadu zobrazení (soubory .cshtml ), které fungují s kontrolerem. V budoucnu při vytváření projektů, které používají Entity Framework, můžete také využít některé další funkce scaffolder: vytvořte první třídu modelu, nevytvářejte připojovací řetězec a pak v poli Přidat kontroler zadejte Nový datový kontext tak, že vyberete + tlačítko vedle třídy kontextu dat. Scaffolder vytvoří vaši DbContext třídu a připojovací řetězec a také kontroler a zobrazení.

  4. Visual Studio otevře soubor Controllers\StudentController.cs . Uvidíte, že byla vytvořena proměnná třídy, která vytvoří instanci objektu kontextu databáze:

    private SchoolContext db = new SchoolContext();
    

    Metoda Index akce získá seznam studentů ze sady entit Studenti přečtením Students vlastnosti instance kontextu databáze:

    public ViewResult Index()
    {
        return View(db.Students.ToList());
    }
    

    Zobrazení Student\Index.cshtml zobrazí tento seznam v tabulce:

    <table>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.LastName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FirstMidName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.EnrollmentDate)
            </th>
            <th></th>
        </tr>
    
    @foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.FirstMidName)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.EnrollmentDate)
            </td>
            <td>
                @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
                @Html.ActionLink("Details", "Details", new { id=item.ID }) |
                @Html.ActionLink("Delete", "Delete", new { id=item.ID })
            </td>
        </tr>
    }
    
  5. Stisknutím kláves Ctrl+F5 spusťte projekt. (Pokud se zobrazí chyba "Nelze vytvořit stínovou kopii", zavřete prohlížeč a zkuste to znovu.)

    Kliknutím na kartu Studenti zobrazíte testovací data vložená metodou Seed . Podle toho, jak úzké je okno prohlížeče, uvidíte v horním panelu Adresa odkaz na kartu Student, nebo budete muset kliknout do pravého horního rohu, abyste odkaz viděli.

    Tlačítko nabídky

Zobrazení databáze

Když jste spustili stránku Studenti a aplikace se pokusila o přístup k databázi, EF zjistil, že neexistuje žádná databáze, a vytvořil ji. Ef pak spustil metodu seed, aby databázi naplnila daty.

K zobrazení databáze v sadě Visual Studio můžete použít Průzkumníka serveru nebo SQL Server Průzkumník objektů (SSOX). Pro účely tohoto kurzu použijete Průzkumník serveru.

  1. Zavřete prohlížeč.

  2. V Průzkumníku serveru rozbalte datová připojení (možná budete muset nejdřív vybrat tlačítko aktualizovat), rozbalte Kontext školy (ContosoUniversity) a pak rozbalte Tabulky , abyste viděli tabulky v nové databázi.

  3. Klikněte pravým tlačítkem myši na tabulku Student a kliknutím na Zobrazit data tabulky zobrazte vytvořené sloupce a řádky vložené do tabulky.

  4. Ukončete připojení Průzkumníka serveru .

Soubory databáze ContosoUniversity1.mdf a .ldf jsou ve složce %USERPROFILE%.

Vzhledem k tomu, že používáte DropCreateDatabaseIfModelChanges inicializátor, můžete teď provést změnu Student třídy, spustit aplikaci znovu a databáze by se automaticky znovu vytvořila tak, aby odpovídala vaší změně. Pokud například do předmětu Student přidáte EmailAddress vlastnost, znovu spusťte stránku Studenti a pak se znovu podívejte na tabulku, zobrazí se nový EmailAddress sloupec.

Konvence

Množství kódu, který jste museli napsat, aby Entity Framework mohla vytvořit kompletní databázi za vás, je minimální z důvodu konvencí nebo předpokladů, které Entity Framework vytváří. Některé z nich už byly zaznamenány nebo byly použity, aniž byste o nich věděli:

  • Jako názvy tabulek se používají pluralizované formy názvů tříd entit.
  • Názvy vlastností entit se používají pro názvy sloupců.
  • Vlastnosti entity s názvem ID nebo classnameID jsou rozpoznány jako vlastnosti primárního klíče.
  • Vlastnost se interpretuje jako vlastnost cizího klíče, pokud má název <vlastnosti navigace název><primárního klíče> (například pro Student navigační vlastnost, StudentID protože Student primární klíč entity je ID). Vlastnosti cizího klíče lze také pojmenovat stejným jednoduchým názvem vlastnosti primárního klíče (například proto, EnrollmentID že Enrollment primární klíč entity je EnrollmentID).><

Viděli jste, že konvence se dají přepsat. Například jste určili, že názvy tabulek nemají být v množném čísle, a později uvidíte, jak explicitně označit vlastnost jako vlastnost cizího klíče.

Získání kódu

Stažení dokončeného projektu

Další materiály

Další informace o EF 6 najdete v těchto článcích:

Další kroky

V tomto kurzu jste:

  • Vytvoření webové aplikace MVC
  • Nastavení stylu webu
  • Nainstalované Entity Framework 6
  • Vytvoření datového modelu
  • Vytvořil se kontext databáze.
  • Inicializovaná databáze s testovacími daty
  • Nastavení EF 6 pro použití LocalDB
  • Vytvoření kontroleru a zobrazení
  • Zobrazení databáze

V dalším článku se dozvíte, jak zkontrolovat a přizpůsobit kód CRUD (vytvoření, čtení, aktualizace, odstranění) v řadičích a zobrazeních.