- Artikel
Notiz
Für Neuentwicklungen empfehlen wirASP.NET Core Razor-Seitenüber ASP.NET MVC-Controller und -Ansichten. Eine ähnliche Tutorialreihe wie diese mit Razor Pages finden Sie unterTutorial: Erste Schritte mit Razor Pages in ASP.NET Core. Das neue Tutorial:
- Ist einfacher zu befolgen.
- Bietet weitere Best Practices für EF Core.
- Verwendet effizientere Abfragen.
- Ist mit der neuesten API aktueller.
- Deckt weitere Funktionen ab.
- Ist der bevorzugte Ansatz für die Entwicklung neuer Anwendungen.
In dieser Reihe von Tutorials erfahren Sie, wie Sie eine ASP.NET MVC 5-Anwendung erstellen, die Entity Framework 6 für den Datenzugriff verwendet. In diesem Tutorial wird der Code First-Workflow verwendet. Informationen zur Auswahl zwischen Code First, Database First und Model First finden Sie unterErstellen Sie ein Modell.
In dieser Tutorialreihe wird erläutert, wie Sie die Beispielanwendung „Contoso University“ erstellen. Bei der Beispielbewerbung handelt es sich um eine einfache Universitätswebsite. Damit können Sie Studenten-, Kurs- und Dozenteninformationen anzeigen und aktualisieren. Hier sind zwei der von Ihnen erstellten Bildschirme:
In diesem Tutorial werden Sie:
- Erstellen Sie eine MVC-Web-App
- Richten Sie den Site-Stil ein
- Installieren Sie Entity Framework 6
- Erstellen Sie das Datenmodell
- Erstellen Sie den Datenbankkontext
- DB mit Testdaten initialisieren
- Richten Sie EF 6 für die Verwendung von LocalDB ein
- Controller und Ansichten erstellen
- Sehen Sie sich die Datenbank an
Voraussetzungen
- Visual Studio 2017
Erstellen Sie eine MVC-Web-App
Öffnen Sie Visual Studio und erstellen Sie ein C#-Webprojekt mitASP.NET-Webanwendung (.NET Framework)Vorlage. Benennen Sie das ProjektContosoUniversityund auswählenOK.
InNeue ASP.NET-Webanwendung – ContosoUniversity, wählenMVC.
Notiz
Standardmäßig ist dieAuthentifizierungOption ist auf eingestelltKeine Authentifikation. Für dieses Tutorial erfordert die Web-App keine Benutzeranmeldung. Außerdem wird der Zugriff nicht basierend auf den angemeldeten Personen eingeschränkt.
WählenOKum das Projekt zu erstellen.
Richten Sie den Site-Stil ein
Mit ein paar einfachen Änderungen werden das Site-Menü, das Layout und die Startseite eingerichtet.
OffenViews\Shared\_Layout.cshtmlund nehmen Sie die folgenden Änderungen vor:
- Ändern Sie jedes Vorkommen von „Meine ASP.NET-Anwendung“ und „Anwendungsname“ in „Contoso University“.
- Fügen Sie Menüeinträge für Studenten, Kurse, Dozenten und Abteilungen hinzu und löschen Sie den Kontakteintrag.
Die Änderungen werden im folgenden Codeausschnitt hervorgehoben:
@ViewBag .Title – Contoso University @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr")@RenderBody()@Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection(" scripts", erforderlich: false)
InAnsichten\Home\Index.cshtml, ersetzen Sie den Inhalt der Datei durch den folgenden Code, um den Text über ASP.NET und MVC durch Text über diese Anwendung zu ersetzen:
@{ ViewBag.Title = "Home Page";}
Contoso University
Willkommen an der Contoso University
Contoso University ist eine Beispielanwendung, die zeigt, wie Entity Framework 6 in einer ASP.NET MVC 5-Webanwendung verwendet wird.
Erstellen Sie es von Grund auf
Sie können die Anwendung erstellen, indem Sie die Schritte in der Tutorialreihe auf der ASP.NET-Site befolgen.
< p>Sehen Sie sich das Tutorial an »Herunterladen
Sie können das fertige Projekt herunterladen.
Herunterladen »
Drücken Sie Strg+F5, um die Website auszuführen. Sie sehen die Startseite mit dem Hauptmenü.
Installieren Sie Entity Framework 6
Von demWerkzeugMenü, wählenNuGet-Paketmanager, und wählen Sie dannPaket-Manager-Konsole.
ImPaket-Manager-KonsoleGeben Sie im Fenster den folgenden Befehl ein:
Install-Package EntityFramework
Dieser Schritt ist einer der wenigen Schritte, die Sie in diesem Tutorial manuell ausführen müssen. Dies hätte jedoch auch automatisch durch die ASP.NET MVC-Gerüstfunktion erfolgen können. Sie führen sie manuell aus, damit Sie die für die Verwendung von Entity Framework (EF) erforderlichen Schritte sehen können. Später verwenden Sie Gerüste, um den MVC-Controller und die Ansichten zu erstellen. Eine Alternative besteht darin, Scaffolding das EF NuGet-Paket automatisch installieren zu lassen, die Datenbankkontextklasse zu erstellen und die Verbindungszeichenfolge zu erstellen. Wenn Sie dazu bereit sind, müssen Sie nur noch diese Schritte überspringen und Ihren MVC-Controller mit einem Gerüst versehen, nachdem Sie Ihre Entitätsklassen erstellt haben.
Erstellen Sie das Datenmodell
Als Nächstes erstellen Sie Entitätsklassen für die Anwendung „Contoso University“. Sie beginnen mit den folgenden drei Entitäten:
Kurs<->Einschreibung<->Student
Entitäten | Beziehung |
---|---|
Kurs zur Einschreibung | Eins-zu-viele |
Student zur Einschreibung | Eins-zu-viele |
Es besteht eine Eins-zu-viele-Beziehung zwischen ihnenStudent
UndEinschreibung
Entitäten, und es besteht eine Eins-zu-viele-Beziehung zwischen ihnenKurs
UndEinschreibung
Entitäten. Mit anderen Worten: Ein Student kann in beliebig vielen Kursen eingeschrieben sein und für einen Kurs können beliebig viele Studenten eingeschrieben sein.
In den folgenden Abschnitten erstellen Sie eine Klasse für jede dieser Entitäten.
Notiz
Wenn Sie versuchen, das Projekt zu kompilieren, bevor Sie alle diese Entitätsklassen erstellt haben, erhalten Sie Compilerfehler.
Die Student-Entität
ImModelleErstellen Sie im Ordner eine Klassendatei mit dem NamenStudent.csindem Sie mit der rechten Maustaste auf den Ordner klickenLösungsforscherund wählenHinzufügen>Klasse. Ersetzen Sie den Vorlagencode durch den folgenden Code:
using System;using System.Collections.Generic;namespace ContosoUniversity.Models{ public class Student { public int ID { get; Satz; } öffentlicher String Nachname { get; Satz; } öffentliche Zeichenfolge FirstMidName { get; Satz; } public DateTime EnrollmentDate { get; Satz; } public virtual ICollection
Enrollments { get; Satz; } }}
DerAUSWEIS
Die Eigenschaft wird zur Primärschlüsselspalte der Datenbanktabelle, die dieser Klasse entspricht. Standardmäßig interpretiert Entity Framework eine benannte EigenschaftAUSWEIS
oderKlassenname AUSWEIS
als Primärschlüssel.
DerAnmeldungen
Eigentum ist einNavigationseigenschaft. Navigationseigenschaften enthalten andere Entitäten, die mit dieser Entität in Zusammenhang stehen. In diesem Fall ist dieAnmeldungen
Eigentum einesStudent
Die Entität wird alles behaltenEinschreibung
Entitäten, die damit in Zusammenhang stehenStudent
juristische Person. Mit anderen Worten, wenn eine gegebeneStudent
Zeile in der Datenbank hat zwei verwandteEinschreibung
Zeilen (Zeilen, die den Primärschlüsselwert dieses Schülers enthaltenStudenten ID
Fremdschlüsselspalte), dassStudent
EntitätAnmeldungen
Die Navigationseigenschaft enthält diese beidenEinschreibung
Entitäten.
Navigationseigenschaften werden normalerweise als definiertvirtuell
damit sie bestimmte Entity Framework-Funktionen nutzen können, zfaules Laden. (Lazy Loading wird später erläutertLesen verwandter DatenTutorial später in dieser Serie.)
Wenn eine Navigationseigenschaft mehrere Entitäten enthalten kann (wie in Viele-zu-Viele- oder Eins-zu-Viele-Beziehungen), muss ihr Typ eine Liste sein, in der Einträge hinzugefügt, gelöscht und aktualisiert werden können, zICollection
.
Die Registrierungsentität
ImModelleOrdner erstellenEnrollment.csund ersetzen Sie den vorhandenen Code durch den folgenden Code:
Namespace ContosoUniversity.Models{ public enum Grade { A, B, C, D, F } public class Enrollment { public int EnrollmentID { get; Satz; } public int CourseID { get; Satz; } public int StudentID { get; Satz; } öffentliche Qualität? Note { get; Satz; } öffentlicher virtueller Kurs Kurs { get; Satz; } public virtual Student Student { get; Satz; } }}
DerEinschreibungs-ID
Eigenschaft wird der Primärschlüssel sein; Diese Entität verwendet dieKlassenname AUSWEIS
Muster stattAUSWEIS
von selbst, wie Sie in der gesehen habenStudent
juristische Person. Normalerweise würden Sie ein Muster auswählen und es in Ihrem gesamten Datenmodell verwenden. Hier zeigt die Variante, dass Sie beide Muster verwenden können. In einem späteren Tutorial erfahren Sie, wie Sie es verwendenAUSWEIS
ohneKlassenname
erleichtert die Implementierung der Vererbung im Datenmodell.
DerGrad
Eigentum ist einAufzählung. Das Fragezeichen nach demGrad
Die Typdeklaration gibt an, dass dieGrad
Eigentum istnullbar. Eine Note, die null ist, unterscheidet sich von einer Nullnote – null bedeutet, dass eine Note nicht bekannt ist oder noch nicht vergeben wurde.
DerStudenten ID
Die Eigenschaft ist ein Fremdschlüssel, und die entsprechende Navigationseigenschaft ist esStudent
. EinEinschreibung
Entität ist mit einem verbundenStudent
Entität, daher kann die Eigenschaft nur eine einzige enthaltenStudent
Entität (im Gegensatz zu derStudenteneinschreibungen
Navigationseigenschaft, die Sie zuvor gesehen haben und die mehrere enthalten kannEinschreibung
Entitäten).
DerKurs-ID
Die Eigenschaft ist ein Fremdschlüssel, und die entsprechende Navigationseigenschaft ist esKurs
. EinEinschreibung
Entität ist mit einem verbundenKurs
juristische Person.
Entity Framework interpretiert eine Eigenschaft als Fremdschlüsseleigenschaft, wenn sie benannt istStudenten ID
für dieStudent
Navigationseigenschaft seit demStudent
Der Primärschlüssel der Entität istAUSWEIS
). Fremdschlüsseleigenschaften können auch einfach gleich benannt werdenKurs-ID
seit derKurs
Der Primärschlüssel der Entität istKurs-ID
).
Die Kursentität
ImModelleOrdner erstellenKurs.csund ersetzen Sie den Vorlagencode durch den folgenden Code:
using System.Collections.Generic;using System.ComponentModel.DataAnnotations.Schema;namespace ContosoUniversity.Models{ public class Course { [DatabaseGenerated(DatabaseGeneratedOption.None)] public int CourseID { get; Satz; } public string Title { get; Satz; } public int Credits { get; Satz; } public virtual ICollection
Enrollments { get; Satz; } }}
DerAnmeldungen
Die Eigenschaft ist eine Navigationseigenschaft. AKurs
Entität kann mit einer beliebigen Anzahl von verknüpft seinEinschreibung
Entitäten.
Wir werden mehr darüber sagenDatabaseGeneratedAttributeAttribut in einem späteren Tutorial dieser Serie. Grundsätzlich können Sie mit diesem Attribut den Primärschlüssel für den Kurs eingeben, anstatt ihn von der Datenbank generieren zu lassen.
Erstellen Sie den Datenbankkontext
Die Hauptklasse, die die Entity Framework-Funktionalität für ein bestimmtes Datenmodell koordiniert, ist dieDatenbankkontextKlasse. Sie erstellen diese Klasse, indem Sie von ableitenSystem.Data.Entity.DbContextKlasse. In Ihrem Code geben Sie an, welche Entitäten im Datenmodell enthalten sind. Sie können auch bestimmte Verhaltensweisen von Entity Framework anpassen. In diesem Projekt wird die Klasse benanntSchulkontext
.
Um einen Ordner im ContosoUniversity-Projekt zu erstellen, klicken Sie mit der rechten Maustaste auf das ProjektLösungsforscherund klickenHinzufügen, und klicken Sie dannNeuer Ordner. Benennen Sie den neuen OrdnerDAL(für Datenzugriffsschicht). Erstellen Sie in diesem Ordner eine neue Klassendatei mit dem NamenSchoolContext.csund ersetzen Sie den Vorlagencode durch den folgenden Code:
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> Studenten { get; Satz; } public DbSet
Enrollments { get; Satz; } public DbSet Courses { get; Satz; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove (); } }}
Geben Sie Entitätssätze an
Dieser Code erstellt eineDbSetEigenschaft für jeden Entitätssatz. In der Entity Framework-Terminologie ist einEntitätssatzentspricht typischerweise einer Datenbanktabelle und einerjuristische Personentspricht einer Zeile in der Tabelle.
Notiz
Sie können das weglassenDbSet
UndDbSet
Anweisungen und es würde genauso funktionieren. Entity Framework würde sie implizit einschließen, weil dieStudent
Entität verweist auf dieEinschreibung
Entität und dieEinschreibung
Entität verweist auf dieKurs
juristische Person.
Geben Sie die Verbindungszeichenfolge an
Der Name der Verbindungszeichenfolge (die Sie später zur Datei „Web.config“ hinzufügen) wird an den Konstruktor übergeben.
public SchoolContext() : base("SchoolContext"){}
Sie können auch die Verbindungszeichenfolge selbst anstelle des Namens einer Zeichenfolge übergeben, die in der Datei „Web.config“ gespeichert ist. Weitere Informationen zu Optionen zum Angeben der zu verwendenden Datenbank finden Sie unterVerbindungszeichenfolgen und Modelle.
Wenn Sie keine Verbindungszeichenfolge oder deren Namen explizit angeben, geht Entity Framework davon aus, dass der Name der Verbindungszeichenfolge mit dem Klassennamen übereinstimmt. Der Standardname der Verbindungszeichenfolge in diesem Beispiel wäre dannSchulkontext
, das Gleiche, was Sie explizit angeben.
Geben Sie einzelne Tabellennamen an
DermodelBuilder.Conventions.Remove
Aussage in derOnModelCreatingDie Methode verhindert, dass Tabellennamen pluralisiert werden. Wenn Sie dies nicht getan hätten, würden die generierten Tabellen in der Datenbank benanntStudenten
,Kurse
, UndAnmeldungen
. Stattdessen lauten die TabellennamenStudent
,Kurs
, UndEinschreibung
. Die Entwickler sind sich nicht einig darüber, ob Tabellennamen pluralisiert werden sollten oder nicht. In diesem Tutorial wird die Singularform verwendet. Der wichtige Punkt ist jedoch, dass Sie die von Ihnen bevorzugte Form auswählen können, indem Sie diese Codezeile einschließen oder weglassen.
DB mit Testdaten initialisieren
Entity Framework kann automatisch eine Datenbank für Sie erstellen (oder löschen und neu erstellen), wenn die Anwendung ausgeführt wird. Sie können festlegen, dass dies bei jeder Ausführung Ihrer Anwendung oder nur dann erfolgen soll, wenn das Modell nicht mit der vorhandenen Datenbank synchronisiert ist. Sie können auch eine schreibenSamen
Methode, die Entity Framework nach dem Erstellen der Datenbank automatisch aufruft, um sie mit Testdaten zu füllen.
Das Standardverhalten besteht darin, eine Datenbank nur dann zu erstellen, wenn sie nicht vorhanden ist (und eine Ausnahme auszulösen, wenn sich das Modell geändert hat und die Datenbank bereits vorhanden ist). In diesem Abschnitt legen Sie fest, dass die Datenbank gelöscht und neu erstellt werden soll, wenn sich das Modell ändert. Das Löschen der Datenbank führt zum Verlust aller Ihrer Daten. Dies ist während der Entwicklung im Allgemeinen in Ordnung, da dieSamen
Die Methode wird ausgeführt, wenn die Datenbank neu erstellt wird, und erstellt Ihre Testdaten neu. Aber in der Produktion möchten Sie im Allgemeinen nicht jedes Mal, wenn Sie das Datenbankschema ändern müssen, alle Ihre Daten verlieren. Später erfahren Sie, wie Sie Modelländerungen handhaben, indem Sie Code First-Migrationen verwenden, um das Datenbankschema zu ändern, anstatt die Datenbank zu löschen und neu zu erstellen.
Erstellen Sie im DAL-Ordner eine neue Klassendatei mit dem NamenSchoolInitializer.csund ersetzen Sie den Vorlagencode durch den folgenden Code, der bei Bedarf die Erstellung einer Datenbank bewirkt und Testdaten in die neue Datenbank lädt.
(Video) Entity Framework Core Tutorial: Das Entity Framework Core in praktischer Anwendung |video2brain.comusing 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
{ protected override void Seed(SchoolContext context) { var Students = new List { new Student{FirstMidName="Carson",LastName="Alexander",EnrollmentDate=DateTime.Parse("2005-09-01 ")}, neuer Student{FirstMidName="Meredith",LastName="Alonso",EnrollmentDate=DateTime.Parse("2002-09-01")}, neuer Student{FirstMidName="Arturo",LastName="Anand", EnrollmentDate=DateTime.Parse("2003-09-01")}, neuer Student{FirstMidName="Gytis",LastName="Barzdukas",EnrollmentDate=DateTime.Parse("2002-09-01")}, neuer Student{ FirstMidName="Yan",LastName="Li",EnrollmentDate=DateTime.Parse("2002-09-01")}, neuer Student{FirstMidName="Peggy",LastName="Justice",EnrollmentDate=DateTime.Parse(" 2001-09-01")}, neuer Student{FirstMidName="Laura",LastName="Norman",EnrollmentDate=DateTime.Parse("2003-09-01")}, neuer Student{FirstMidName="Nino",LastName ="Olivetto",EnrollmentDate=DateTime.Parse("2005-09-01")} }; Students.ForEach(s => context.Students.Add(s)); context.SaveChanges(); var course = new List { new Course{CourseID=1050,Title="Chemistry",Credits=3,}, new Course{CourseID=4022,Title="Microeconomics",Credits=3,}, new Course{ CourseID=4041,Title="Macroeconomics",Credits=3,}, neuer Kurs{CourseID=1045,Title="Calculus",Credits=4,}, neuer Kurs{CourseID=3141,Title="Trigonometry",Credits= 4,}, neuer Kurs{CourseID=2021,Title="Composition",Credits=3,}, neuer Kurs{CourseID=2042,Title="Literature",Credits=4,} }; Kurse.ForEach(s => context.Courses.Add(s)); context.SaveChanges(); var enrollments = new List { 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}, neue Einschreibung{StudentID=2,CourseID=1045,Grade=Grade.B}, neue Einschreibung{StudentID=2,CourseID=3141,Grade=Grade.F}, neu Einschreibung{StudentID=2,CourseID=2021,Grade=Grade.F}, neue Einschreibung{StudentID=3,CourseID=1050}, neue Einschreibung{StudentID=4,CourseID=1050,}, neue Einschreibung{StudentID=4,CourseID =4022,Grade=Grade.F}, neue Einschreibung{StudentID=5,CourseID=4041,Grade=Grade.C}, neue Einschreibung{StudentID=6,CourseID=1045}, neue Einschreibung{StudentID=7,CourseID=3141 ,Grade=Grade.A}, }; enrollments.ForEach(s => context.Enrollments.Add(s)); context.SaveChanges(); } }} Der
Samen
Die Methode verwendet das Datenbankkontextobjekt als Eingabeparameter und der Code in der Methode verwendet dieses Objekt, um der Datenbank neue Entitäten hinzuzufügen. Für jeden Entitätstyp erstellt der Code eine Sammlung neuer Entitäten und fügt sie den entsprechenden hinzuDbSet
Eigenschaft und speichert dann die Änderungen in der Datenbank. Es ist nicht notwendig, das anzurufenÄnderungen speichern
Fügen Sie nach jeder Entitätsgruppe eine Methode hinzu, wie hier beschrieben. Dies hilft Ihnen jedoch, die Ursache eines Problems zu lokalisieren, wenn eine Ausnahme auftritt, während der Code in die Datenbank schreibt.Um Entity Framework anzuweisen, Ihre Initialisierungsklasse zu verwenden, fügen Sie ein Element hinzu
EntityFramework
Element in der AnwendungWeb.configDatei (die im Stammprojektordner), wie im folgenden Beispiel gezeigt:Der
Kontexttyp
Gibt den vollständig qualifizierten Namen der Kontextklasse und die Assembly an, in der sie sich befindetDatenbankinitialisierertyp
Gibt den vollständig qualifizierten Namen der Initialisierungsklasse und der Assembly an, in der sie sich befindet. (Wenn Sie nicht möchten, dass EF den Initialisierer verwendet, können Sie ein Attribut für festlegenKontext
Element:disableDatabaseInitialization="true"
.) Weitere Informationen finden Sie unterKonfigurationsdateieinstellungen.Eine Alternative zum Festlegen des Initialisierers imWeb.configDatei besteht darin, dies im Code durch Hinzufügen einer zu tun
Database.SetInitializer
Aussage zumAnwendungsstart
Methode in derGlobal.asax.csDatei. Weitere Informationen finden Sie unterGrundlegendes zu Datenbankinitialisierern im Entity Framework-Code.
Die Anwendung ist jetzt so eingerichtet, dass Entity Framework die Datenbank mit dem Modell (Ihrem) vergleicht, wenn Sie in einer bestimmten Ausführung der Anwendung zum ersten Mal auf die Datenbank zugreifenSchulkontext
und Entitätsklassen). Wenn es einen Unterschied gibt, löscht die Anwendung die Datenbank und erstellt sie neu.
Notiz
Wenn Sie eine Anwendung auf einem Produktions-Webserver bereitstellen, müssen Sie Code entfernen oder deaktivieren, der die Datenbank löscht und neu erstellt. Sie werden dies in einem späteren Tutorial dieser Serie tun.
Richten Sie EF 6 für die Verwendung von LocalDB ein
LocalDBist eine schlanke Version der SQL Server Express-Datenbank-Engine. Es ist einfach zu installieren und zu konfigurieren, startet bei Bedarf und läuft im Benutzermodus. LocalDB wird in einem speziellen Ausführungsmodus von SQL Server Express ausgeführt, der es Ihnen ermöglicht, mit Datenbanken zu arbeiten.mdfDateien. Sie können LocalDB-Datenbankdateien in die Datei einfügenAnwendungsdatenOrdner eines Webprojekts, wenn Sie die Datenbank mit dem Projekt kopieren möchten. Mit der Benutzerinstanzfunktion in SQL Server Express können Sie auch damit arbeiten.mdfDateien, aber die Benutzerinstanzfunktion ist veraltet; Daher wird LocalDB für die Arbeit empfohlen.mdfDateien. LocalDB wird standardmäßig mit Visual Studio installiert.
Normalerweise wird SQL Server Express nicht für Produktionswebanwendungen verwendet. Insbesondere LocalDB wird nicht für den produktiven Einsatz mit einer Webanwendung empfohlen, da es nicht für die Zusammenarbeit mit IIS konzipiert ist.
In diesem Tutorial arbeiten Sie mit LocalDB. Öffnen Sie die AnwendungWeb.configDatei und fügen Sie eine hinzu
VerbindungsStrings
Element vor demApp Einstellungen
Element, wie im folgenden Beispiel gezeigt. (Stellen Sie sicher, dass Sie die aktualisierenWeb.configDatei im Stammprojektordner. Es gibt auch einWeb.configDatei in derAnsichtenUnterordner, den Sie nicht aktualisieren müssen.)
Die von Ihnen hinzugefügte Verbindungszeichenfolge gibt an, dass Entity Framework eine LocalDB-Datenbank mit dem Namen verwendetContosoUniversity1.mdf. (Die Datenbank existiert noch nicht, wird aber von EF erstellt.) Wenn Sie die Datenbank in Ihrem erstellen möchtenAnwendungsdatenOrdner, den Sie hinzufügen könntenAttachDBFilename=|DataDirectory|\ContosoUniversity1.mdf
zur Verbindungszeichenfolge. Weitere Informationen zu Verbindungszeichenfolgen finden Sie unterSQL Server-Verbindungszeichenfolgen für ASP.NET-Webanwendungen.
Sie benötigen eigentlich keine Verbindungszeichenfolge imWeb.configDatei. Wenn Sie keine Verbindungszeichenfolge angeben, verwendet Entity Framework eine Standardverbindungszeichenfolge basierend auf Ihrer Kontextklasse. Weitere Informationen finden Sie unterCode zuerst in eine neue Datenbank.
Controller und Ansichten erstellen
Jetzt erstellen Sie eine Webseite zur Anzeige von Daten. Der Prozess der Datenabfrage löst automatisch die Erstellung der Datenbank aus. Sie beginnen mit der Erstellung eines neuen Controllers. Aber bevor Sie das tun, erstellen Sie das Projekt, um die Modell- und Kontextklassen für das MVC-Controller-Gerüst verfügbar zu machen.
Klicken Sie mit der rechten Maustaste aufControllerOrdner inLösungsforscher, wählenHinzufügen, und klicken Sie dannNeuer Gerüstgegenstand.
ImGerüst hinzufügenDialogfeld auswählenMVC 5-Controller mit Ansichten unter Verwendung von Entity Framework, und wählen Sie dannHinzufügen.
ImController hinzufügenTreffen Sie im Dialogfeld die folgende Auswahl und wählen Sie dannHinzufügen:
Modellklasse:Student (ContosoUniversity.Models). (Wenn diese Option nicht in der Dropdown-Liste angezeigt wird, erstellen Sie das Projekt und versuchen Sie es erneut.)
Datenkontextklasse:SchoolContext (ContosoUniversity.DAL).
Controllername:StudentController(nicht StudentsController).
Belassen Sie die Standardwerte für die anderen Felder.
Wenn Sie klickenHinzufügen, der Gerüstbauer erstellt einStudentController.csDatei und eine Reihe von Ansichten (.cshtmlDateien), die mit dem Controller funktionieren. Wenn Sie in Zukunft Projekte erstellen, die Entity Framework verwenden, können Sie auch einige zusätzliche Funktionen des Gerüstbauers nutzen: Erstellen Sie Ihre erste Modellklasse, erstellen Sie keine Verbindungszeichenfolge und dann in derController hinzufügenFeld angebenNeuer Datenkontextdurch Auswahl der+Schaltfläche nebenDatenkontextklasse. Der Gerüstbauer erstellt Ihr
DbContext
Klasse und Ihre Verbindungszeichenfolge sowie den Controller und die Ansichten.
Visual Studio öffnet dieController\StudentController.csDatei. Sie sehen, dass eine Klassenvariable erstellt wurde, die ein Datenbankkontextobjekt instanziiert:
private SchoolContext db = new SchoolContext();
Der
Index
Die Aktionsmethode ruft eine Liste der Schüler abStudentenEntität durch Lesen der festgelegtStudenten
Eigenschaft der Datenbankkontextinstanz:(Video) ASP.NET Core Teil 1/7 - Erste Schrittepublic ViewResult Index(){ return View(db.Students.ToList());}
DerStudent\Index.cshtmlview zeigt diese Liste in einer Tabelle an:
@Html.DisplayNameFor(model => model.LastName) @Html.DisplayNameFor(model => model.FirstMidName) @Html. DisplayNameFor(model => model.EnrollmentDate) @Html.DisplayFor(modelItem => item.LastName ) @Html.DisplayFor(modelItem => item.FirstMidName) @Html.DisplayFor(modelItem => item.EnrollmentDate) @Html.ActionLink („Bearbeiten“, „Bearbeiten“, new { id=item.ID }) | @Html.ActionLink("Details", "Details", new { id=item.ID }) | @Html.ActionLink("Delete", "Delete", new { id=item.ID }) Drücken Sie Strg+F5, um das Projekt auszuführen. (Wenn Sie die Fehlermeldung „Schattenkopie kann nicht erstellt werden“ erhalten, schließen Sie den Browser und versuchen Sie es erneut.)
Drücke denStudentenKlicken Sie auf die Registerkarte, um die Testdaten anzuzeigen
Samen
Methode eingefügt. Je nachdem, wie schmal Ihr Browserfenster ist, sehen Sie den Link zur Registerkarte „Schüler“ in der oberen Adressleiste oder Sie müssen in die obere rechte Ecke klicken, um den Link anzuzeigen.Sehen Sie sich die Datenbank an
Als Sie die Seite „Studenten“ ausführten und die Anwendung versuchte, auf die Datenbank zuzugreifen, stellte EF fest, dass keine Datenbank vorhanden war, und erstellte eine. Anschließend führte EF die Seed-Methode aus, um die Datenbank mit Daten zu füllen.
Sie können beides verwendenServer-ExploreroderSQL Server-Objekt-Explorer(SSOX), um die Datenbank in Visual Studio anzuzeigen. Für dieses Tutorial verwenden SieServer-Explorer.
Schließen Sie den Browser.
InServer-Explorer, expandierenDatenverbindungen(Möglicherweise müssen Sie zuerst die Schaltfläche „Aktualisieren“ auswählen), erweiternSchulkontext (ContosoUniversity)und dann erweiternTischeum die Tabellen in Ihrer neuen Datenbank anzuzeigen.
Klicken Sie mit der rechten Maustaste aufStudentTabelle und klicken SieTabellendaten anzeigenum die erstellten Spalten und die in die Tabelle eingefügten Zeilen anzuzeigen.
SchließeServer-ExplorerVerbindung.
DerContosoUniversity1.mdfUnd.ldfDatenbankdateien befinden sich in der%BENUTZERPROFIL%Ordner.
Weil Sie das verwenden
DropCreateDatabaseIfModelChanges
Initialisierer, Sie könnten jetzt eine Änderung an der vornehmenStudent
Klasse, führen Sie die Anwendung erneut aus und die Datenbank wird automatisch neu erstellt, um Ihrer Änderung zu entsprechen. Wenn Sie beispielsweise eine hinzufügenE-Mail-Addresse
Eigentum an dieStudent
Rufen Sie die Seite „Studenten“ erneut auf, schauen Sie sich die Tabelle noch einmal an und Sie werden eine neue Klasse sehenE-Mail-Addresse
Spalte.Konventionen
Die Menge an Code, die Sie schreiben mussten, damit Entity Framework eine vollständige Datenbank für Sie erstellen konnte, ist aus diesem Grund minimalKonventionenoder Annahmen, die Entity Framework trifft. Einige davon wurden bereits zur Kenntnis genommen oder wurden verwendet, ohne dass Sie sich dessen bewusst waren:
- Als Tabellennamen werden die Pluralformen von Entitätsklassennamen verwendet.
- Für Spaltennamen werden Entitätseigenschaftennamen verwendet.
- Benannte Entitätseigenschaften
AUSWEIS
oderKlassennameAUSWEIS
werden als Primärschlüsseleigenschaften erkannt. - Eine Eigenschaft wird als Fremdschlüsseleigenschaft interpretiert, wenn sie benannt ist
(Zum Beispiel,Studenten ID
für dieStudent
Navigationseigenschaft seit demStudent
Der Primärschlüssel der Entität istAUSWEIS
). Fremdschlüsseleigenschaften können auch einfach denselben Namen haben(z. B. Einschreibungs-ID
seit derEinschreibung
Der Primärschlüssel der Entität istEinschreibungs-ID
).
Sie haben gesehen, dass Konventionen außer Kraft gesetzt werden können. Sie haben beispielsweise angegeben, dass Tabellennamen nicht pluralisiert werden sollen, und Sie werden später sehen, wie Sie eine Eigenschaft explizit als Fremdschlüsseleigenschaft markieren.
Holen Sie sich den Code
Laden Sie das abgeschlossene Projekt herunter
Zusätzliche Ressourcen
Weitere Informationen zu EF 6 finden Sie in diesen Artikeln:
ASP.NET-Datenzugriff – Empfohlene Ressourcen
Code First-Konventionen
Erstellen eines komplexeren Datenmodells
Nächste Schritte
In diesem Tutorial werden Sie:
- Erstellt eine MVC-Web-App
- Richten Sie den Site-Stil ein
- Installiertes Entity Framework 6
- Das Datenmodell wurde erstellt
- Datenbankkontext erstellt
- DB mit Testdaten initialisiert
- Richten Sie EF 6 für die Verwendung von LocalDB ein
- Controller und Ansichten erstellt
- Datenbank angeschaut
Fahren Sie mit dem nächsten Artikel fort, um zu erfahren, wie Sie den CRUD-Code (Create, Read, Update, Delete) in Ihren Controllern und Ansichten überprüfen und anpassen.
Implementieren Sie grundlegende CRUD-Funktionalität
FAQs
How to change Entity Framework version 6 to 5? ›
- Select Tools -> Library Package Manager -> Package Manager Console.
- Run Install-Package EntityFramework -version 5.0.
The recommended way to use Entity Framework 6 in an ASP.NET Core application is to put the EF6 context and model classes in a class library project that targets . NET Framework. Add a reference to the class library from the ASP.NET Core project. See the sample Visual Studio solution with EF6 and ASP.NET Core projects.
Which version of Entity Framework should I use for .NET 6? ›EF Core 6.0 will align with . NET 6 as a long-term support (LTS) release.
How to write code in Entity Framework? ›Step 1 − First, create the console application from File → New → Project… Step 2 − Select Windows from the left pane and Console Application from the template pane. Step 3 − Enter EFCodeFirstDemo as the name and select OK. Step 4 − Right-click on your project in the solution explorer and select Manage NuGet Packages…
What is difference between Entity Framework 5 and 6? ›EF5 is built into the core of . NET 4.5, whereas EF6 has been shifted out, and is open source. This means that you must add the new EF6 assemblies to all of the relevant projects in the solution, in particular the entry project. This means that you must remove assembly System.
Is Entity Framework 6 still supported? ›Versions 6.0, 6.1, 6.2, and 6.3 are no longer supported. Although Entity Framework 6. x is still supported, it is no longer being developed and will only receive fixes for security issues. The Entity Framework 6.
What is difference between MVC and Entity Framework? ›MVC is framework mainly concentrates on how you deliver a webpage from server to client. Entity framework is an object relational mapper which helps you to abstract different types of databases (MSSQL,MySQL etc) and helps querying objects instead of having sql strings in our project. Hope this helps!
What is the difference between Entity Framework and .NET core? ›Entity Framework Core is an object-database mapper (and a successor to Entity Framework). . NET Core is a cross-platform software framework developed by Microsoft (and a successor to . NET Framework).
What is the difference between Entity Framework and NET Framework? ›The entity framework is a powerful framework that handles the database services that generate the mechanism of basic SQL queries, we can use these both in one project so that the entity framework performs the CRUD operation and the ADO.net performs the reporting and is used to operates the bulk of SQL data operations.
Should I use .NET 6 or .NET framework? ›NET 6 can run on natively Mac and Linux, . NET Framework cannot and you would need a third-party runtime like Mono for that capability. . NET 6 you can compile the framework into your application so the separate framework does not need to be installed to run your app. .
What is better than Entity Framework? ›
Dapper is generally faster than EF Core because it uses raw SQL queries and has less overhead. However, EF Core provides caching and other performance optimizations that can sometimes make it faster. Dapper is simpler than EF Core because it uses raw SQL queries and has fewer features.
What is the latest version of Entity Framework 6? ›Original author(s) | Microsoft |
---|---|
Developer(s) | .NET Foundation |
Initial release | August 11, 2008 |
Stable release | Entity Framework 6: v6.4.4 Entity Framework Core: v7.0.0 / Entity Framework Core: November 8, 2022 |
Repository | github.com/dotnet/ef6 github.com/dotnet/efcore |
Command | Sub Commands | Usage |
---|---|---|
Database | drop | Drops the database. |
update | Updates the database to a specified migration. | |
DbContext | info | Gets information about a DbContext type. |
list | Lists available DbContext types. |
Entity framework is an Object Relational Mapping (ORM) framework that offers an automated mechanism to developers for storing and accessing the data in the database. This tutorial covers the features of Entity Framework using Code First approach.
What is code first approach in Entity Framework Core 6? ›In the code-first approach, EF Core API creates the database and tables using migration based on the conventions and configuration provided in your domain classes. This approach is useful in Domain Driven Design (DDD).
Should I use EF6 or EF Core? ›Keep using EF6 if the data access code is stable and not likely to evolve or need new features. Port to EF Core if the data access code is evolving or if the app needs new features only available in EF Core. Porting to EF Core is also often done for performance.
Why not to use Entity Framework? ›The most common issue usually is on the programmer's side: firing the SQL execution on middle-query time, when it's not supposed to get the data yet and the query results being extensive (too many records) without the programmer even thinking about it.
What is the newest Entity Framework? ›Entity Framework Core 8, scheduled for release in November 2023, brings new features and improvements to features already introduced in EF Core 7. Notable features include support for raw SQL queries for unmapped types, lazy-loading improvements, and support for TimeOnly and DateOnly SQL Server data types.
Is .NET 6 same as .NET Core? ›NET 6, though, is ASP.NET Core 6, a major upgrade of Microsoft's open source framework for building modern web applications. ASP.NET Core 6 is built on top of the . NET Core runtime and allows you to build and run applications on Windows, Linux, and macOS. ASP.NET Core 6 combines the features of Web API and MVC.
Is EF6 deprecated? ›Currently EF Core is the main focus of development for the Entity Framework Team at Microsoft. This means there are no new major features planned for EF6. However EF6 is still maintained as an open source project and a supported Microsoft product.
What is the difference between .NET and .NET framework? ›
Net framework is a free, open-source (few packages are available), development platform. The . Net Core is a cross-platform which may be used in creating, designing, and developing various applications with Windows, Mac OS, and Linux.
How do I downgrade from .NET 6 to .NET 5? ›- Open Visual Studio Preview 2022 Preview 6.0.
- Create a new C# Console App from the default template.
- Target the .NET 6.0 framework.
- Run the project.
- Open the project properties and change target framework to .NET 5.0.
- Create a New Folder for Your .NET Framework Project.
- Create a New File and Add the Code.
- Add the .csproj to the Existing Solution.
- Configure the Project File to Include Code.
- Add NuGet Packages.
To update this entity we need to attach the Department to the context and inform it to mark its status as Modified . Now if we call the SaveChanges method, the context will send an update query to the database.
How to update Entity Framework Core version? ›Update the tools
Use dotnet tool update --global dotnet-ef to update the global tools to the latest available version. If you have the tools installed locally in your project use dotnet tool update dotnet-ef . Install a specific version by appending --version <VERSION> to your command.
Because it was not a Long-Term Support (LTS) release that is regularly maintained -- getting security and other fixes along with technical support -- by Microsoft for three years, its support ends May 8 (non-LTS releases are supported for 18 months, or 6 months after the next release ships, whichever is longer). .
What is net 5 vs net 6? ›NET 5 and . NET 6 are supported on multiple operating systems, including Windows, Linux, Android, iOS /tvOS, and macOS. The only difference is that . NET 6 is further supported on Windows Arms64 and macOS Apple Silicon while .
How do I upgrade my net version? ›NET application from any initial version (. NET Framework or . NET Core) by right-clicking on your project in Solution Explorer and choose “Upgrade”. Don't forget to install the extension first.
How do I upgrade my project from .NET framework to .NET 6? ›- Step 1 - Understand Your Dependencies. ...
- Step 2 - Upgrade the Visual Studio Project (csproj) Format. ...
- Step 3 - Multi-target . ...
- Step 4 - Fix Code Issues. ...
- Step 5 - High-Level Projects. ...
- Step 6 - Testing.
- Select the Latest Update Package Version.
- Download the Runtime package.
- Locate that file after it downloads.
- Double-click the file to start the setup wizard.
- Follow the instructions. The install wizard guides you through the setup.
- Once done reboot the PC. Shift4.
Can you install multiple versions of NET Framework? ›
Users can run multiple versions of the framework of . NET on their computers. If you are a developer and need to deploy or develop software or an app, then you will need to know which .
What are the correct steps for editing data using Entity Framework? ›To edit or delete data, update or remove entity objects from a context and call the SaveChanges() method. EF API will build the appropriate UPDATE or DELETE command and execute it to the database.
How to update data in Entity Framework database first? ›Right-click anywhere on the design surface, and select Update Model from Database. In the Update Wizard, select the Refresh tab and then select Tables > dbo > Student. Click Finish. After the update process is finished, the database diagram includes the new MiddleName property.
How to update database in Entity Framework code first? ›Run the Update-Database command in a Package Manager console. Code First Migrations will compare the migrations in our Migrations folder with the ones that have been applied to the database. It will see that the MigrationForRoleInEmp migration needs to be applied and run it.
When would you use EF6 vs EF Core? ›Keep using EF6 if the data access code is stable and not likely to evolve or need new features. Port to EF Core if the data access code is evolving or if the app needs new features only available in EF Core. Porting to EF Core is also often done for performance.