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

Note

Pro nový vývoj doporučujeme, abyste ASP.NET Core Razor Pages přes ASP.NET a zobrazení MVC. Řadu kurzů, která se podobá tomuto použití Razor Pages, najdete v tématu Kurz: Začínáme s Razor Pages v ASP.NET Core. Nový kurz:

  • Je snazší sledovat.
  • Poskytuje další EF Core osvědčených postupů.
  • Používá efektivnější dotazy.
  • Je aktuálnější s nejnovějším rozhraním API.
  • Zahrnuje další funkce.
  • Je upřednostňovaným přístupem k vývoji nových aplikací.

V této sérii kurzů se naučíte, jak 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 zvolit mezi Code First, Database First a Model First, najdete v tématu Vytvoření modelu.

V této sérii kurzů se dozvíte, jak sestavit ukázkovou aplikaci Contoso University. Ukázková aplikace je jednoduchý web na univerzitě. 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 se naučíte:

  • Vytvoření webové aplikace MVC
  • Nastavit styl lokality
  • Nainstalovat Entity Framework 6
  • Vytvoření datového modelu
  • Vytvoření kontextu databáze
  • Inicializovat databázi s testovacími daty
  • Nastavte pro použití LocalDB EF 6.
  • Vytvořit kontroler a zobrazení
  • Zobrazení databáze

Předpoklady

Vytvoření webové aplikace MVC

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

    Dialogové okno Nový projekt v aplikaci Visual Studio

  2. V New ASP.NET Web Application – ContosoUniversityvyberte MVC.

    Dialogové okno Nová webová aplikace v aplikaci Visual Studio

    Note

    Ve výchozím nastavení je možnost ověřování nastavena na bez ověřování. Pro tento kurz webová aplikace nepožaduje, aby se uživatelé přihlásili. Také neomezuje přístup na základě toho, kdo je přihlášený.

  3. Vyberte OK a vytvořte projekt.

Nastavit styl lokality

V několika jednoduchých změnách se nastaví nabídka web, rozložení a Domovská stránka.

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

    • Změňte všechny výskyty "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 kontaktu.

    Změny jsou zvýrazněny 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 Views\Home\Index.cshtmlnahraď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 spustíte Web. V hlavní nabídce se zobrazí domovská stránka.

Nainstalovat Entity Framework 6

  1. V nabídce nástroje zvolte Správce balíčků NuGeta 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é tento kurz provede ručně, ale to může být provedeno automaticky funkcí generování uživatelského rozhraní ASP.NET MVC. Provádíte je ručně, abyste viděli kroky požadované k použití Entity Framework (EF). Pro vytvoření kontroleru a zobrazení MVC použijete generování uživatelského rozhraní později. Alternativou je umožnit automatické instalaci balíčku NuGet pro EF, vytvoření třídy kontextu databáze a vytvoření připojovacího řetězce. Až to uděláte, stačí, když budete chtít tento krok provést, přeskočte tyto kroky a uživatelské rozhraní vašeho kontroleru MVC po vytvoření tříd entit.

Vytvoření datového modelu

V dalším kroku vytvoříte třídy entit pro aplikaci Contoso University. Začnete s následujícími třemi entitami:

Kurz <-> registrace <-> studenta

Entity Relace
Kurz k registraci 1: n
Student k registraci 1: n

Mezi entitami Student a Enrollment existuje vztah 1:1 a mezi Coursemi a Enrollment entitami existuje vztah 1: n. Jinými slovy, student může být zaregistrovaný v jakémkoli počtu kurzů a kurz může mít zaregistrovaný libovolný počet studentů.

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

Note

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

Entita studenta

  • Ve složce modely vytvořte soubor třídy s názvem 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 změní na sloupec primárního klíče tabulky databáze, který odpovídá této třídě. Ve výchozím nastavení Entity Framework interpretuje vlastnost s názvem ID nebo classname ID jako primární klíč.

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

Navigační vlastnosti jsou obvykle definovány jako virtual tak, aby mohly využívat určité Entity Framework funkce, 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 (jako v relacích m:n nebo 1:1), musí se jednat o seznam, ve kterém lze přidávat, odstraňovat a aktualizovat položky, například ICollection.

Registrace entity

  • Ve složce 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í klíč. Tato entita používá ID vzor ClassName místo ID sám sebe, jako jste viděli v entitě Student. Obvykle byste zvolili jeden model a používali ho v rámci svého datového modelu. V tomto příkladu variace znázorňuje, že můžete použít libovolný vzor. V pozdějším kurzu uvidíte, jak používat ID bez classname usnadňuje implementaci dědičnosti v datovém modelu.

Vlastnost Grade je výčet. Otazník po deklaraci typu Grade označuje, že vlastnost Grade může mít hodnotu null. Třídu, která má hodnotu null, se liší od nulové třídy – hodnota null znamená, že se nejedná o známku 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é entitě Student, takže vlastnost může uchovávat jenom jednu entitu Student (na rozdíl od Student.Enrollments navigační vlastnost, kterou jste viděli dříve, která může obsahovat několik entit Enrollment).

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

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

Kurz entity

  • Ve složce modely vytvořte Course.csa 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 entit Enrollment.

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

Vytvoření kontextu databáze

Hlavní třída, která koordinuje funkce Entity Framework pro daný datový model, je třída kontextu databáze . Tuto třídu vytvoříte odvozením z třídy System. data. entity. DbContext . Ve vašem kódu určíte, které entity budou zahrnuty v datovém modelu. Můžete také přizpůsobit určité chování Entity Framework. V tomto projektu je třída pojmenována SchoolContext.

  • Chcete-li vytvořit složku v projektu ContosoUniversity, klikněte pravým tlačítkem myši na projekt v Průzkumník řešení a klikněte na možnost Přidata poté klikněte na možnost Nová složka. Pojmenujte novou složku dal (pro přístup k datům). V této složce vytvořte nový soubor třídy s názvem SchoolContext.csa 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 negenerickými pro každou sadu entit. V Entity Framework terminologii sada entit obvykle odpovídá tabulce databáze a entita odpovídá řádku v tabulce.

Note

Můžete vynechat příkazy DbSet<Enrollment> a DbSet<Course> a bude fungovat stejně. Entity Framework by je implicitně zahrnovaly, protože Student entita odkazuje na entitu Enrollment a entita Enrollment odkazuje na entitu Course.

Zadejte připojovací řetězec

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

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

Místo názvu, který je uložen v souboru Web. config, můžete také předat samotný připojovací řetězec. 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ý jako to, co explicitně zadáte.

Zadat jednotné názvy tabulek

Příkaz modelBuilder.Conventions.Remove v metodě OnModelCreating zabraňuje v pluralitování názvů tabulek. Pokud jste to neudělali, vygenerované tabulky v databázi budou pojmenovány Students, Coursesa Enrollments. Místo toho se názvy tabulek Student, Coursea Enrollment. Vývojáři nesouhlasí s tím, zda by měly být názvy tabulek v množném čísle. V tomto kurzu se používá jednotný formulář, ale důležitým bodem je, že můžete vybrat libovolný formulář, který dáváte přednost při zahrnutí nebo vynechání tohoto řádku kódu.

Inicializovat databázi s testovacími daty

Entity Framework může při spuštění aplikace automaticky vytvořit (nebo vyřadit a znovu vytvořit) databázi. Můžete určit, že se má provést při každém spuštění aplikace, nebo jenom v případě, že model není synchronizovaný se stávající databází. Můžete také napsat metodu Seed, která Entity Framework automaticky volá po vytvoření databáze, aby se naplnila testovacími daty.

Výchozím chováním je vytvořit databázi pouze v případě, že neexistuje (a vyvolat výjimku, pokud se model změnil a databáze již existuje). V této části určíte, že se má databáze při každé změně modelu vyřadit a znovu vytvořit. Vyřazení databáze způsobí ztrátu všech vašich dat. To je obvykle v pořádku během vývoje, protože metoda Seed se spustí, když se databáze znovu vytvoří a znovu vytvoří vaše testovací data. Ale v produkčním prostředí nechcete při každé změně schématu databáze obvykle ztratit všechna data. Později se dozvíte, jak zpracovat změny modelu pomocí Migrace Code First ke změně schématu databáze místo vyřazení a opětovnému 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, což způsobí, že se databáze vytvoří v případě potřeby a načte testovací data do nové databáze.

    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é vlastnosti DbSet a poté uloží změny do databáze. Není nutné volat metodu SaveChanges za každou skupinu entit, jak je zde provedeno, ale to vám pomůže najít zdroj problému, pokud dojde k výjimce, když kód zapisuje do databáze.

  2. Chcete-li sdělit, Entity Framework použít třídu inicializátoru, přidejte element do entityFramework elementu v souboru Web. config aplikace (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>
    

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

    Alternativou k nastavení inicializátoru v souboru Web. config je jeho provedení v kódu přidáním příkazu Database.SetInitializer do metody Application_Start 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ává databázi s modelem (vaše SchoolContext třídy a třídy entit). V případě, že dojde k rozdílu, aplikace uvolní a znovu vytvoří databázi.

Note

Když nasadíte aplikaci na provozní webový server, je nutné odebrat nebo zakázat kód, který databázi vyřazuje a znovu vytvoří. V pozdějším kurzu v této sérii provedete.

Nastavte pro použití LocalDB EF 6.

LocalDB je zjednodušená verze databázového stroje SQL Server Express. Instalaci a konfiguraci, spuštění na vyžádání a spuštění v uživatelském režimu je snadné. LocalDB se spouští ve speciálním režimu provádění SQL Server Express, který umožňuje pracovat s databázemi jako se soubory . mdf . Soubory databáze LocalDB můžete umístit do složky Data_aplikace webového projektu, pokud chcete mít možnost zkopírovat databázi do projektu. Funkce uživatelské instance v SQL Server Express také umožňuje pracovat se soubory . mdf , ale funkce uživatelské instance je zastaralá. Proto se LocalDB doporučuje pro práci se soubory . mdf . LocalDB se ve výchozím nastavení instaluje v aplikaci Visual Studio.

Pro produkční webové aplikace se obvykle SQL Server Express nepoužívá. LocalDB se konkrétně nedoporučuje pro použití 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 Web. config aplikace a přidejte connectionStrings element předcházející appSettings elementu, jak je znázorněno v následujícím příkladu. (Nezapomeňte aktualizovat soubor Web. config v kořenové složce projektu. V podsložce zobrazení je také soubor Web. config , který není nutné 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 zatím neexistuje, ale EF ji vytvoří.) Pokud chcete vytvořit databázi ve složce _dat vaší aplikace , můžete 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ích řetězců pro webové aplikace v ASP.NET.

V souboru Web. config nebudete ve skutečnosti potřebovat připojovací řetězec. Pokud neposkytnete připojovací řetězec, Entity Framework používá výchozí připojovací řetězec na základě vaší třídy kontextu. Další informace najdete v tématu Code First k nové databázi.

Vytvořit kontroler a zobrazení

Teď vytvoříte webovou stránku, na které se budou zobrazovat data. Proces vyžádání dat automaticky aktivuje vytvoření databáze. Začnete vytvořením nového kontroleru. Než to uděláte, sestavte projekt, aby byly třídy modelů a kontextu dostupné pro generování uživatelského rozhraní kontroléru MVC.

  1. V Průzkumník řešeníklikněte pravým tlačítkem na složku řadiče , vyberte Přidata pak klikněte na Nová vygenerovaná položka.

  2. V dialogovém okně Přidat vygenerované uživatelské rozhraní vyberte kontroler MVC 5 se zobrazeními, pomocí Entity Frameworka pak zvolte Přidat.

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

  3. V dialogovém okně Přidat řadič proveďte následující výběry a pak zvolte Přidat:

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

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

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

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

      Po kliknutí na tlačítko Přidatgenerátor vytvoří soubor StudentController.cs a sadu zobrazení (soubory . cshtml ), které pracují s řadičem. V budoucnu, když vytváříte projekty, které používají Entity Framework, můžete také využít výhod některých dalších funkcí generátoru: Vytvořte svoji první třídu modelu, nevytvářejte připojovací řetězec a potom v poli Přidat kontrolér zadejte nový kontext dat tak, že vyberete tlačítko + vedle třídy datový kontext. Lešení vytvoří třídu DbContext a váš připojovací řetězec také jako kontroler a zobrazení.

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

    private SchoolContext db = new SchoolContext();
    

    Metoda Index akce načte seznam studentů ze sady entit studentů načtením vlastnosti Students 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 kombinace 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 Students zobrazíte testovací data, která byla vložená metodou Seed. V závislosti na tom, jak úzká je okno prohlížeče, uvidíte v horním adresním řádku odkaz na kartu student nebo kliknutím na pravý horní roh zobrazíte odkaz.

    Tlačítko nabídky

Zobrazení databáze

Když jste spustili stránku Students a aplikace se pokusila získat přístup k databázi, EF zjistila, že neexistovala žádná databáze a nebyla vytvořena. EF pak spustila metodu počáteční hodnoty k naplnění databáze daty.

K zobrazení databáze v aplikaci Visual Studio můžete použít buď Průzkumník serveru , nebo Průzkumník objektů systému SQL Server (SSOX). V tomto kurzu použijete Průzkumník serveru.

  1. Zavřete prohlížeč.

  2. V Průzkumník serverurozbalte datová připojení (nejdřív možná budete muset vybrat tlačítko Aktualizovat), rozbalte školní kontext (ContosoUniversity) a potom 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 možnost Zobrazit data tabulky Zobrazte sloupce, které byly vytvořeny, a řádky, které byly vloženy do tabulky.

  4. Zavřete Průzkumník serveru připojení.

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

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

Zásady

Množství kódu, který jste museli zapsat, aby Entity Framework mohl vytvořit úplnou databázi, je minimální z důvodu konvencínebo předpokladů, které Entity Framework provádí. Některé z nich již byly označeny nebo byly použity bez vědomí, že jsou:

  • V množném čísle se používají v názvech tabulek názvy tříd entit.
  • Názvy vlastností entit se používají pro názvy sloupců.
  • Vlastnosti entity s názvem ID nebo classname ID jsou rozpoznávány jako vlastnosti primárního klíče.
  • Vlastnost je interpretována jako vlastnost cizího klíče, pokud je pojmenována <název vlastnosti navigace><název vlastnosti primárního klíče> (například StudentID pro Student navigační vlastnost, protože je Student primární klíč entity ID). Vlastnosti cizího klíče lze také pojmenovat stejným <název vlastnosti primárního klíče> (například EnrollmentID, protože primární klíč entity Enrollment je EnrollmentID).

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

Získání kódu

Stáhnout dokončený projekt

Další zdroje

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

Další kroky

V tomto kurzu se naučíte:

  • Vytvořená webová aplikace MVC
  • Nastavit styl lokality
  • Nainstalováno Entity Framework 6
  • Vytvoření datového modelu
  • Byl vytvořen kontext databáze.
  • Inicializovaná databáze s testovacími daty
  • Nastavte pro použití LocalDB EF 6.
  • Vytvořen kontroler a zobrazení
  • Zobrazení databáze

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