Tutorial: Verwenden Sie EF Migrations in einer ASP.NET MVC-App und stellen Sie sie in Azure bereit (2023)

  • Artikel

Bisher wurde die Beispielwebanwendung der Contoso University lokal in IIS Express auf Ihrem Entwicklungscomputer ausgeführt. Um eine echte Anwendung für andere über das Internet verfügbar zu machen, müssen Sie sie bei einem Webhosting-Anbieter bereitstellen. In diesem Tutorial aktivieren Sie Code First-Migrationen und stellen die Anwendung in der Cloud in Azure bereit:

  • Aktivieren Sie Code First-Migrationen. Mit der Migrationsfunktion können Sie das Datenmodell ändern und Ihre Änderungen in der Produktion bereitstellen, indem Sie das Datenbankschema aktualisieren, ohne die Datenbank löschen und neu erstellen zu müssen.
  • Bereitstellung in Azure. Dieser Schritt ist optional; Sie können mit den verbleibenden Tutorials fortfahren, ohne das Projekt bereitgestellt zu haben.

Wir empfehlen die Verwendung eines kontinuierlichen Integrationsprozesses mit Quellcodeverwaltung für die Bereitstellung, diese Themen werden in diesem Tutorial jedoch nicht behandelt. Weitere Informationen finden Sie unterQuellcodeverwaltungUndkontinuierliche IntegrationKapitel vonErstellen realer Cloud-Apps mit Azure.

In diesem Tutorial werden Sie:

  • Aktivieren Sie Code First-Migrationen
  • Stellen Sie die App in Azure bereit (optional)

Voraussetzungen

  • Verbindungsausfallsicherheit und Befehlsabfang

Aktivieren Sie Code First-Migrationen

Wenn Sie eine neue Anwendung entwickeln, ändert sich Ihr Datenmodell häufig und jedes Mal, wenn sich das Modell ändert, gerät die Synchronisierung mit der Datenbank verloren. Sie haben das Entity Framework so konfiguriert, dass die Datenbank bei jeder Änderung des Datenmodells automatisch gelöscht und neu erstellt wird. Wenn Sie Entitätsklassen hinzufügen, entfernen oder ändern oder Ihre ändernDbContextWenn Sie die Anwendung das nächste Mal ausführen, löscht sie automatisch Ihre vorhandene Datenbank, erstellt eine neue, die dem Modell entspricht, und füllt sie mit Testdaten.

Diese Methode, die Datenbank mit dem Datenmodell synchron zu halten, funktioniert gut, bis Sie die Anwendung in der Produktion bereitstellen. Wenn die Anwendung in der Produktion ausgeführt wird, speichert sie normalerweise Daten, die Sie behalten möchten, und Sie möchten nicht jedes Mal alles verlieren, wenn Sie eine Änderung vornehmen, z. B. das Hinzufügen einer neuen Spalte. DerCode-First-MigrationenDie Funktion löst dieses Problem, indem sie es Code First ermöglicht, das Datenbankschema zu aktualisieren, anstatt die Datenbank zu löschen und neu zu erstellen. In diesem Tutorial stellen Sie die Anwendung bereit und aktivieren zur Vorbereitung Migrationen.

  1. Deaktivieren Sie den Initialisierer, den Sie zuvor eingerichtet haben, indem Sie ihn auskommentieren oder löschenKontexteElement, das Sie der Web.config-Datei der Anwendung hinzugefügt haben.

             
  2. Auch in der BewerbungWeb.configÄndern Sie den Namen der Datenbank in der Verbindungszeichenfolge in „ContosoUniversity2“.

     

    Durch diese Änderung wird das Projekt so eingerichtet, dass bei der ersten Migration eine neue Datenbank erstellt wird. Dies ist nicht erforderlich, aber Sie werden später sehen, warum es eine gute Idee ist.

  3. Von demWerkzeugMenü auswählenNuGet-Paketmanager>Paket-Manager-Konsole.

  4. Bei derPN>Eingabeaufforderung Geben Sie die folgenden Befehle ein:

    enable-migrationsadd-migration InitialCreate

    DerEnable-MigrationenDer Befehl erstellt eineMigrationenOrdner im ContosoUniversity-Projekt und legt in diesem Ordner a abKonfiguration.csDatei, die Sie bearbeiten können, um Migrationen zu konfigurieren.

    (Wenn Sie den Schritt oben, der Sie zum Ändern des Datenbanknamens auffordert, verpasst haben, findet Migrations die vorhandene Datenbank und führt den Vorgang automatisch ausAdd-MigrationBefehl. Das ist in Ordnung, es bedeutet nur, dass Sie den Migrationscode nicht testen, bevor Sie die Datenbank bereitstellen. Später, wenn Sie das ausführenDatenbank auf den neusten Stand bringenBefehl passiert nichts, da die Datenbank bereits existiert.)

    Öffne dasContosoUniversity\Migrations\Configuration.csDatei. Wie die Initialisierungsklasse, die Sie zuvor gesehen haben, ist dieAufbauDie Klasse umfasst aSamenMethode.

    interne versiegelte Klassenkonfiguration: DbMigrationsConfiguration{ public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(ContosoUniversity.DAL.SchoolContext context) { // Diese Methode wird nach der Migration auf die neueste Version aufgerufen. // Sie können die Hilfserweiterungsmethode DbSet.AddOrUpdate() // verwenden, um die Erstellung doppelter Seed-Daten zu vermeiden. Z.B. // // context.People.AddOrUpdate( // p => p.FullName, // neue Person { FullName = "Andrew Peters" }, // neue Person { FullName = "Brice Lambson" }, // neue Person { FullName = "Rowan Miller" } // ); // }}

    Der Zweck derSamenDie Methode besteht darin, Ihnen das Einfügen oder Aktualisieren von Testdaten zu ermöglichen, nachdem Code First die Datenbank erstellt oder aktualisiert hat. Die Methode wird aufgerufen, wenn die Datenbank erstellt wird und jedes Mal, wenn das Datenbankschema nach einer Datenmodelländerung aktualisiert wird.

Richten Sie die Seed-Methode ein

Wenn Sie die Datenbank für jede Datenmodelländerung löschen und neu erstellen, verwenden Sie die InitialisierungsklasseSamenMethode zum Einfügen von Testdaten, da nach jeder Modelländerung die Datenbank gelöscht wird und alle Testdaten verloren gehen. Bei Code First-Migrationen bleiben Testdaten nach Datenbankänderungen erhalten, sodass Testdaten in die einbezogen werdenSamenMethode ist normalerweise nicht erforderlich. Eigentlich willst du das nichtSamenMethode zum Einfügen von Testdaten, wenn Sie Migrationen verwenden, um die Datenbank in der Produktion bereitzustellen, da dieSamenDie Methode wird in der Produktion ausgeführt. In diesem Fall möchten Sie dasSamenMethode, um nur die Daten in die Datenbank einzufügen, die Sie in der Produktion benötigen. Beispielsweise möchten Sie möglicherweise, dass die Datenbank tatsächliche Abteilungsnamen enthältAbteilungTabelle, wenn die Anwendung in der Produktion verfügbar wird.

Für dieses Tutorial verwenden Sie Migrationen für die Bereitstellung, aber IhreSamen-Methode fügt trotzdem Testdaten ein, um einfacher zu sehen, wie die Anwendungsfunktionalität funktioniert, ohne dass viele Daten manuell eingegeben werden müssen.

(Video) Erstelle und hoste eine Blazor Server App mit ASP.NET Core, VS 2022 und Windows Server (mit IIS)

  1. Ersetzen Sie den Inhalt derKonfiguration.csDatei mit dem folgenden Code, der Testdaten in die neue Datenbank lädt.

    Namespace ContosoUniversity.Migrations{ using ContosoUniversity.Models; Verwenden des Systems; mit System.Collections.Generic; mit System.Data.Entity; Verwenden von System.Data.Entity.Migrations; mit System.Linq; interne versiegelte Klassenkonfiguration: DbMigrationsConfiguration { public Configuration() { AutomaticMigrationsEnabled = false; } protected override void Seed(ContosoUniversity.DAL.SchoolContext context) { var Students = new List { new Student { FirstMidName = "Carson", LastName = "Alexander", EnrollmentDate = DateTime.Parse("2010-09-01 ") }, new Student { FirstMidName = "Meredith", LastName = "Alonso", EnrollmentDate = DateTime.Parse("2012-09-01") }, new Student { FirstMidName = "Arturo", LastName = "Anand", EnrollmentDate = DateTime.Parse("2013-09-01") }, neuer Student { FirstMidName = "Gytis", LastName = "Barzdukas", EnrollmentDate = DateTime.Parse("2012-09-01") }, neuer Student { FirstMidName = "Yan", LastName = "Li", EnrollmentDate = DateTime.Parse("2012-09-01") }, neuer Student { FirstMidName = "Peggy", LastName = "Justice", EnrollmentDate = DateTime.Parse(" 2011-09-01") }, neuer Student { FirstMidName = "Laura", LastName = "Norman", EnrollmentDate = DateTime.Parse("2013-09-01") }, neuer Student { FirstMidName = "Nino", LastName = "Olivetto", EnrollmentDate = DateTime.Parse("2005-08-11") } }; Students.ForEach(s => context.Students.AddOrUpdate(p => p.LastName, 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, Titel = „Makroökonomie“, Credits = 3, }, neuer Kurs {CourseID = 1045, Titel = „Infinitesimalrechnung“, Credits = 4, }, neuer Kurs {CourseID = 3141, Titel = „Trigonometrie“, Credits = 4, }, neuer Kurs {CourseID = 2021, Titel = „Komposition“, Credits = 3, }, neuer Kurs {CourseID = 2042, Titel = „Literatur“, Credits = 4, } }; course.ForEach(s => context.Courses.AddOrUpdate(p => p.Title, s)); context.SaveChanges(); var enrollments = new List { new Enrollment { StudentID = Students.Single(s => s.LastName == "Alexander").ID, CourseID = Courses.Single(c => c.Title == "Chemistry" ).CourseID, Grade = Grade.A }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Alexander").ID, CourseID = Courses.Single(c => c.Title == " Mikroökonomie" ).CourseID, Grade = Grade.C }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Alexander").ID, CourseID = Courses.Single(c => c.Title = = "Makroökonomie" ).CourseID, Grade = Grade.B }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Alonso").ID, CourseID = Courses.Single(c => c. Title == "Calculus" ).CourseID, Grade = Grade.B }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Alonso").ID, CourseID = Courses.Single(c => c.Title == "Trigonometry" .CourseID, Grade = Grade.B }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Alonso").ID, CourseID = Courses.Single(c => c.Title == "Composition" ).CourseID, Grade = Grade.B }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Anand").ID, CourseID = Courses.Single (c => c.Title == "Chemie" ).CourseID }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Anand").ID, CourseID = Courses.Single(c => c.Title == "Microeconomics").CourseID, Grade = Grade.B }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Barzdukas").ID, CourseID = Courses.Single(c => c.Title == "Chemistry").CourseID, Grade = Grade.B }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Li").ID, CourseID = Courses.Single (c => c.Title == "Composition").CourseID, Grade = Grade.B }, neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Justice").ID, CourseID = Kurse .Single(c => c.Title == "Literatur").CourseID, Grade = Grade.B } }; foreach (Einschreibung e in Einschreibungen) { var enrollmentInDataBase = context.Enrollments.Where( s => s.Student.ID == e.StudentID && s.Course.CourseID == e.CourseID).SingleOrDefault(); if (enrollmentInDataBase == null) { context.Enrollments.Add(e); } } context.SaveChanges(); } }}

    DerSamenDie 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 hinzuDbSetEigenschaft und speichert dann die Änderungen in der Datenbank. Es ist nicht notwendig, das anzurufenÄnderungen speichernFü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.

    Einige der Anweisungen, die Daten einfügen, verwenden dieAddOrUpdateMethode zum Durchführen einer „Upsert“-Operation. Weil dasSamenDie Methode wird jedes Mal ausgeführt, wenn Sie die ausführenDatenbank auf den neusten Stand bringenNormalerweise können Sie nach jeder Migration nicht einfach Daten einfügen, da die Zeilen, die Sie hinzufügen möchten, nach der ersten Migration, bei der die Datenbank erstellt wird, bereits vorhanden sind. Der „Upsert“-Vorgang verhindert Fehler, die auftreten würden, wenn Sie versuchen, eine Zeile einzufügen, die bereits vorhanden ist, aber nichtüberschreibtalle Änderungen an Daten, die Sie möglicherweise während des Testens der Anwendung vorgenommen haben. Bei Testdaten in einigen Tabellen möchten Sie möglicherweise nicht, dass dies geschieht: In einigen Fällen, wenn Sie Daten während des Tests ändern, möchten Sie, dass Ihre Änderungen nach Datenbankaktualisierungen erhalten bleiben. In diesem Fall möchten Sie eine bedingte Einfügeoperation durchführen: Fügen Sie eine Zeile nur ein, wenn sie noch nicht vorhanden ist. Die Seed-Methode nutzt beide Ansätze.

    Der erste Parameter, der an übergeben wirdAddOrUpdateDie Methode gibt die Eigenschaft an, mit der überprüft werden soll, ob eine Zeile bereits vorhanden ist. Für die von Ihnen bereitgestellten Teststudentendaten gilt:Familienname, NachnameDie Eigenschaft kann für diesen Zweck verwendet werden, da jeder Nachname in der Liste eindeutig ist:

    context.Students.AddOrUpdate(p => p.LastName, s)

    Dieser Code geht davon aus, dass Nachnamen eindeutig sind. Wenn Sie einen Schüler mit einem doppelten Nachnamen manuell hinzufügen, wird bei der nächsten Migration die folgende Ausnahme angezeigt:

    Sequenz enthält mehr als ein Element

    Informationen zum Umgang mit redundanten Daten, z. B. zwei Studenten namens „Alexander Carson“, finden Sie unterSeeding und Debugging von Entity Framework (EF)-DBsauf Rick Andersons Blog. Weitere Informationen zumAddOrUpdateMethode, sieheSeien Sie vorsichtig mit der AddOrUpdate-Methode von EF 4.3auf Julie Lermans Blog.

    Der Code, der erstelltEinschreibungEntities gehen davon aus, dass Sie das habenAUSWEISWert in den Entitäten in derStudentenSammlung, obwohl Sie diese Eigenschaft nicht im Code festgelegt haben, der die Sammlung erstellt.

    neue Einschreibung { StudentID = Students.Single(s => s.LastName == "Alexander").ID, CourseID = Courses.Single(c => c.Title == "Chemistry" ).CourseID, Grade = Grade.A },

    Du kannst den ... benutzenAUSWEISEigentum hier, weil dieAUSWEISDer Wert wird beim Aufruf eingestelltÄnderungen speichernfür dieStudentenSammlung. EF ruft automatisch den Primärschlüsselwert ab, wenn es eine Entität in die Datenbank einfügt, und aktualisiert diesenAUSWEISEigenschaft der Entität im Gedächtnis.

    Der Code, der jedes hinzufügtEinschreibungEntität zumAnmeldungenDas Entitätsset verwendet das nichtAddOrUpdateMethode. Es prüft, ob eine Entität bereits existiert und fügt die Entität ein, wenn sie nicht existiert. Bei diesem Ansatz bleiben die Änderungen erhalten, die Sie über die Benutzeroberfläche der Anwendung an einer Einschreibungsnote vornehmen. Der Code durchläuft jedes Mitglied vonEinschreibungAufführenund wenn die Registrierung nicht in der Datenbank gefunden wird, wird sie der Datenbank hinzugefügt. Wenn Sie die Datenbank zum ersten Mal aktualisieren, ist die Datenbank leer, sodass jede Registrierung hinzugefügt wird.

    foreach (Einschreibung e in Einschreibungen){ var enrollmentInDataBase = context.Enrollments.Where( s => s.Student.ID == e.Student.ID && s.Course.CourseID == e.Course.CourseID).SingleOrDefault() ; if (enrollmentInDataBase == null) { context.Enrollments.Add(e); }}
  2. Erstellen Sie das Projekt.

Führen Sie die erste Migration durch

Als Sie das ausgeführt habenAdd-MigrationMit dem Befehl Migrations wurde der Code generiert, der die Datenbank von Grund auf erstellen würde. Dieser Code ist auch in derMigrationenOrdner, in der Datei mit dem Namen_InitialCreate.cs. DerHochMethode derInitialCreateDie Klasse erstellt die Datenbanktabellen, die den Entitätssätzen des Datenmodells entsprechen, und dieRunterMethode löscht sie.

öffentliche Teilklasse InitialCreate : DbMigration{ public override void Up() { CreateTable( "dbo.Course", c => new { CourseID = c.Int(nullable: false), Title = c.String(), Credits = c. Int(nullable: false), }) .PrimaryKey(t => t.CourseID); CreateTable( "dbo.Enrollment", c => new { EnrollmentID = c.Int(nullable: false, Identity: true), CourseID = c.Int(nullable: false), StudentID = c.Int(nullable: false), Grade = c.Int(), }) .PrimaryKey(t => t.EnrollmentID) .ForeignKey("dbo.Course", t => t.CourseID, cascadeDelete: true) .ForeignKey("dbo.Student", t => t.StudentID, cascadeDelete: true) .Index(t => t.CourseID) .Index(t => t.StudentID); CreateTable( "dbo.Student", c => new { ID = c.Int(nullable: false, Identity: true), LastName = c.String(), FirstMidName = c.String(), EnrollmentDate = c.DateTime( nullable: false), }) .PrimaryKey(t => t.ID); } public override void Down() { DropForeignKey("dbo.Enrollment", "StudentID", "dbo.Student"); DropForeignKey("dbo.Enrollment", "CourseID", "dbo.Course"); DropIndex("dbo.Enrollment", new[] { "StudentID" }); DropIndex("dbo.Enrollment", new[] { "CourseID" }); DropTable("dbo.Student"); DropTable("dbo.Enrollment"); DropTable("dbo.Course"); }}

Migrationen nennt dasHochMethode zum Implementieren der Datenmodelländerungen für eine Migration. Wenn Sie einen Befehl zum Zurücksetzen des Updates eingeben, ruft Migrations den aufRunterMethode.

Dies ist die anfängliche Migration, die erstellt wurde, als Sie das eingegeben habenAdd-Migration InitialCreateBefehl. Der Parameter (InitialCreateim Beispiel) wird für den Dateinamen verwendet und kann beliebig sein; Normalerweise wählen Sie ein Wort oder eine Phrase, die zusammenfasst, was bei der Migration geschieht. Beispielsweise könnten Sie eine spätere Migration „AddDepartmentTable“ nennen.

Wenn Sie die erste Migration erstellt haben, während die Datenbank bereits vorhanden ist, wird der Datenbankerstellungscode generiert, muss jedoch nicht ausgeführt werden, da die Datenbank bereits mit dem Datenmodell übereinstimmt. Wenn Sie die App in einer anderen Umgebung bereitstellen, in der die Datenbank noch nicht vorhanden ist, wird dieser Code ausgeführt, um Ihre Datenbank zu erstellen. Daher empfiehlt es sich, ihn zuerst zu testen. Aus diesem Grund haben Sie zuvor den Namen der Datenbank in der Verbindungszeichenfolge geändert, damit bei Migrationen eine neue Datenbank erstellt werden kann.

  1. ImPaket-Manager-KonsoleGeben Sie im Fenster den folgenden Befehl ein:

    Datenbank auf den neusten Stand bringen

    DerDatenbank auf den neusten Stand bringenDer Befehl führt den ausHochMethode zum Erstellen der Datenbank und führt dann die ausSamenMethode zum Auffüllen der Datenbank. Der gleiche Prozess wird in der Produktion automatisch ausgeführt, nachdem Sie die Anwendung bereitgestellt haben, wie Sie im folgenden Abschnitt sehen werden.

  2. VerwendenServer-Explorerum die Datenbank zu überprüfen, wie Sie es im ersten Tutorial getan haben, und führen Sie die Anwendung aus, um zu überprüfen, ob alles immer noch wie zuvor funktioniert.

    (Video) .NET Core, ASP.NET Core, Entity Framework Core – nun einsatzreif?

Bereitstellung in Azure

Bisher wurde die Anwendung lokal in IIS Express auf Ihrem Entwicklungscomputer ausgeführt. Um es für andere Personen über das Internet verfügbar zu machen, müssen Sie es bei einem Webhosting-Anbieter bereitstellen. In diesem Abschnitt des Tutorials stellen Sie es in Azure bereit. Dieser Abschnitt ist optional; Sie können dies überspringen und mit dem folgenden Tutorial fortfahren oder die Anweisungen in diesem Abschnitt für einen anderen Hosting-Anbieter Ihrer Wahl anpassen.

Verwenden Sie Code First-Migrationen, um die Datenbank bereitzustellen

Um die Datenbank bereitzustellen, verwenden Sie Code First Migrations. Wenn Sie das Veröffentlichungsprofil erstellen, das Sie zum Konfigurieren von Einstellungen für die Bereitstellung aus Visual Studio verwenden, aktivieren Sie ein Kontrollkästchen mit der BezeichnungDatenbank auf den neusten Stand bringen. Diese Einstellung bewirkt, dass der Bereitstellungsprozess die Anwendung automatisch konfiguriertWeb.configDatei auf dem Zielserver, damit Code First die Datei verwendetMigrateDatabaseToLatestVersionInitialisierungsklasse.

Visual Studio führt während des Bereitstellungsprozesses keine Aktionen mit der Datenbank aus, während es Ihr Projekt auf den Zielserver kopiert. Wenn Sie die bereitgestellte Anwendung ausführen und diese zum ersten Mal nach der Bereitstellung auf die Datenbank zugreift, prüft Code First, ob die Datenbank mit dem Datenmodell übereinstimmt. Bei einer Nichtübereinstimmung erstellt Code First automatisch die Datenbank (sofern sie noch nicht vorhanden ist) oder aktualisiert das Datenbankschema auf die neueste Version (falls eine Datenbank vorhanden ist, aber nicht mit dem Modell übereinstimmt). Wenn die Anwendung eine Migration implementiertSamen-Methode wird die Methode ausgeführt, nachdem die Datenbank erstellt oder das Schema aktualisiert wurde.

Ihre MigrationenSamenMethode fügt Testdaten ein. Wenn Sie die Bereitstellung in einer Produktionsumgebung durchführen würden, müssten Sie die ändernSamen-Methode, sodass nur die Daten eingefügt werden, die Sie in Ihre Produktionsdatenbank einfügen möchten. Beispielsweise möchten Sie in Ihrem aktuellen Datenmodell möglicherweise echte Kurse, aber fiktive Studenten in der Entwicklungsdatenbank haben. Sie können eine schreibenSamenMethode, um beide in der Entwicklung zu laden und dann die fiktiven Studenten auszukommentieren, bevor Sie sie in der Produktion bereitstellen. Oder Sie können eine schreibenSamenMethode, um nur Kurse zu laden und die fiktiven Studenten manuell über die Benutzeroberfläche der Anwendung in die Testdatenbank einzugeben.

Holen Sie sich ein Azure-Konto

Sie benötigen ein Azure-Konto. Wenn Sie noch keins, aber ein Visual Studio-Abonnement haben, können Sie dies tunAktivieren Sie Ihre Abonnementvorteile. Andernfalls können Sie in nur wenigen Minuten ein kostenloses Testkonto erstellen. Einzelheiten finden Sie unterKostenlose Azure-Testversion.

Erstellen Sie eine Website und eine SQL-Datenbank in Azure

Ihre Web-App in Azure wird in einer Shared-Hosting-Umgebung ausgeführt, was bedeutet, dass sie auf virtuellen Maschinen (VMs) ausgeführt wird, die mit anderen Azure-Clients gemeinsam genutzt werden. Eine Shared-Hosting-Umgebung ist eine kostengünstige Möglichkeit, in die Cloud einzusteigen. Wenn Ihr Webverkehr später zunimmt, kann die Anwendung durch die Ausführung auf dedizierten VMs entsprechend dem Bedarf skaliert werden. Weitere Informationen zu den Preisoptionen für Azure App Service finden Sie unterPreise für App-Services.

Sie stellen die Datenbank in der Azure SQL-Datenbank bereit. Die SQL-Datenbank ist ein cloudbasierter relationaler Datenbankdienst, der auf SQL Server-Technologien basiert. Tools und Anwendungen, die mit SQL Server funktionieren, funktionieren auch mit SQL-Datenbanken.

  1. ImAzure-Verwaltungsportal, wählenErstellen Sie eine Ressourcein der linken Registerkarte und wählen Sie dannAlles sehenauf derNeuFenster (bzwKlinge), um alle verfügbaren Ressourcen anzuzeigen. WählenWeb-App + SQLimNetzAbschnitt derAllesKlinge. Zum Schluss wählen SieErstellen.

    Tutorial: Verwenden Sie EF Migrations in einer ASP.NET MVC-App und stellen Sie sie in Azure bereit (1)

    Das Formular zum Erstellen eines neuenNeue Web-App + SQLRessource wird geöffnet.

  2. Geben Sie eine Zeichenfolge einApp NameFeld, das als eindeutige URL für Ihre Anwendung verwendet werden soll. Die vollständige URL besteht aus dem, was Sie hier eingeben, plus der Standarddomäne von Azure App Services (.azurewebsites.net). Wenn dieApp NameWenn das Feld bereits belegt ist, benachrichtigt Sie der Assistent mit einem roten SymbolDer App-Name ist nicht verfügbarNachricht. Wenn dieApp Nameverfügbar ist, sehen Sie ein grünes Häkchen.

  3. ImAbonnementWählen Sie im Feld das Azure-Abonnement aus, in dem Sie das möchtenApp-Servicewohnen.

  4. ImRessourcengruppeWählen Sie im Textfeld eine Ressourcengruppe aus oder erstellen Sie eine neue. Diese Einstellung gibt an, in welchem ​​Rechenzentrum Ihre Website ausgeführt wird. Weitere Informationen zu Ressourcengruppen finden Sie unterRessourcengruppen.

  5. Erstelle eine neueApp-Service-Planindem Sie auf klickenAbschnitt „App-Service“.,Erstelle neu, und ausfüllenApp Service-Plan(kann derselbe Name wie App Service sein),Standort, UndPreisstufe(Es gibt eine kostenlose Option).

  6. KlickenSQL-Datenbank, und wählen Sie dannErstellen Sie eine neue Datenbankoder wählen Sie eine vorhandene Datenbank aus.

  7. ImNameGeben Sie im Feld einen Namen für Ihre Datenbank ein.

  8. Drücke denZielserverFeld und wählen Sie dann ausErstellen Sie einen neuen Server. Wenn Sie zuvor einen Server erstellt haben, können Sie alternativ diesen Server aus der Liste der verfügbaren Server auswählen.

  9. WählenPreisstufeAbschnitt, wählen SieFrei. Sollten zusätzliche Ressourcen benötigt werden, kann die Datenbank jederzeit skaliert werden. Weitere Informationen zu Azure SQL-Preisen finden Sie unterPreise für Azure SQL-Datenbank.

  10. ÄndernKollationwie benötigt.

    (Video) Lernen Sie ASP.Net MVC 6 in einem Video kennen

  11. Geben Sie einen Administrator einSQL-Administrator-BenutzernameUndSQL-Administratorkennwort.

    • Wenn Sie ausgewählt habenNeuer SQL-DatenbankserverDefinieren Sie einen neuen Namen und ein neues Passwort, die Sie später verwenden, wenn Sie auf die Datenbank zugreifen.
    • Wenn Sie einen zuvor erstellten Server ausgewählt haben, geben Sie die Anmeldeinformationen für diesen Server ein.
  12. Die Telemetrieerfassung kann für App Service mithilfe von Application Insights aktiviert werden. Mit wenig Konfiguration sammelt Application Insights wertvolle Ereignis-, Ausnahme-, Abhängigkeits-, Anforderungs- und Ablaufverfolgungsinformationen. Weitere Informationen zu Application Insights finden Sie unterAzure Monitor.

  13. KlickenErstellenunten, um anzuzeigen, dass Sie fertig sind.

    Das Verwaltungsportal kehrt zur Dashboard-Seite zurück und dieBenachrichtigungenDer Bereich oben auf der Seite zeigt an, dass die Site erstellt wird. Nach einer Weile (normalerweise weniger als einer Minute) wird eine Benachrichtigung angezeigt, dass die Bereitstellung erfolgreich war. In der Navigationsleiste links erscheint der neue App Service imApp-DiensteAbschnitt und die neue SQL-Datenbank erscheint imSQL-DatenbankenAbschnitt.

Stellen Sie die App in Azure bereit

  1. Klicken Sie in Visual Studio mit der rechten Maustaste auf das ProjektLösungsforscherund auswählenVeröffentlichenaus dem Kontextmenü.

  2. Auf derWählen Sie ein VeröffentlichungszielSeite, wählen SieApp-Serviceund dannWählen Sie Vorhanden aus, und wählen Sie dannVeröffentlichen.

    Tutorial: Verwenden Sie EF Migrations in einer ASP.NET MVC-App und stellen Sie sie in Azure bereit (2)

  3. Wenn Sie Ihr Azure-Abonnement noch nicht in Visual Studio hinzugefügt haben, führen Sie die Schritte auf dem Bildschirm aus. Mit diesen Schritten kann Visual Studio eine Verbindung zu Ihrem Azure-Abonnement herstellen, sodass die Liste angezeigt wirdApp-Dienstewird Ihre Website einbinden.

  4. Auf derApp-ServiceSeite, wählen Sie die ausAbonnementSie haben den App Service hinzugefügt. UnterSicht, wählenRessourcengruppe. Erweitern Sie die Ressourcengruppe, der Sie den App Service hinzugefügt haben, und wählen Sie dann den App Service aus. WählenOKum die App zu veröffentlichen.

  5. DerAusgangDas Fenster zeigt an, welche Bereitstellungsaktionen durchgeführt wurden, und meldet den erfolgreichen Abschluss der Bereitstellung.

  6. Nach erfolgreicher Bereitstellung öffnet sich der Standardbrowser automatisch mit der URL der bereitgestellten Website.

    Tutorial: Verwenden Sie EF Migrations in einer ASP.NET MVC-App und stellen Sie sie in Azure bereit (3)

    Ihre App läuft jetzt in der Cloud.

An diesem Punkt ist dieSchulkontextDie Datenbank wurde aufgrund Ihrer Auswahl in der Azure SQL-Datenbank erstelltCode-First-Migrationen ausführen (wird beim App-Start ausgeführt). DerWeb.configDie Datei auf der bereitgestellten Website wurde so geändert, dass dieMigrateDatabaseToLatestVersionDer Initialisierer wird ausgeführt, wenn Ihr Code zum ersten Mal Daten in der Datenbank liest oder schreibt (was geschah, als Sie Folgendes ausgewählt haben).StudentenTab):

Tutorial: Verwenden Sie EF Migrations in einer ASP.NET MVC-App und stellen Sie sie in Azure bereit (4)

Der Bereitstellungsprozess hat auch eine neue Verbindungszeichenfolge erstellt(SchoolContext_DatabasePublish) für Code First-Migrationen zur Verwendung zum Aktualisieren des Datenbankschemas und zum Seeding der Datenbank.

Tutorial: Verwenden Sie EF Migrations in einer ASP.NET MVC-App und stellen Sie sie in Azure bereit (5)

Sie finden die bereitgestellte Version der Web.config-Datei auf Ihrem eigenen Computer unterContosoUniversity\obj\Release\Package\PackageTmp\Web.config. Sie können auf die bereitgestellten Dateien zugreifenWeb.configDatei selbst per FTP. Anweisungen finden Sie unterASP.NET-Webbereitstellung mit Visual Studio: Bereitstellen eines Code-Updates. Befolgen Sie die Anweisungen, die mit „Um ein FTP-Tool verwenden zu können, benötigen Sie drei Dinge: die FTP-URL, den Benutzernamen und das Passwort“ beginnen.

Notiz

Die Web-App implementiert keine Sicherheit, sodass jeder, der die URL findet, die Daten ändern kann. Anweisungen zum Sichern der Website finden Sie unterStellen Sie eine sichere ASP.NET MVC-App mit Mitgliedschaft, OAuth und SQL-Datenbank in Azure bereit. Sie können verhindern, dass andere Personen die Website nutzen, indem Sie den Dienst über das Azure-Verwaltungsportal oder beendenServer-Explorerin Visual Studio.

(Video) .NET Core Web API Microservice with SQL Server Entity Framework Core

Tutorial: Verwenden Sie EF Migrations in einer ASP.NET MVC-App und stellen Sie sie in Azure bereit (6)

Erweiterte Migrationsszenarien

Wenn Sie eine Datenbank bereitstellen, indem Sie Migrationen automatisch ausführen, wie in diesem Tutorial gezeigt, und Sie die Datenbank auf einer Website bereitstellen, die auf mehreren Servern ausgeführt wird, kann es sein, dass mehrere Server versuchen, Migrationen gleichzeitig auszuführen. Migrationen sind atomar. Wenn also zwei Server versuchen, dieselbe Migration auszuführen, ist einer erfolgreich und der andere schlägt fehl (vorausgesetzt, die Vorgänge können nicht zweimal durchgeführt werden). Wenn Sie in diesem Szenario diese Probleme vermeiden möchten, können Sie Migrationen manuell aufrufen und Ihren eigenen Code einrichten, sodass die Migration nur einmal erfolgt. Weitere Informationen finden Sie unterAusführen und Skripten von Migrationen aus Codeauf Rowan Millers Blog undMigrate.exe(zum Ausführen von Migrationen über die Befehlszeile).

Informationen zu anderen Migrationsszenarien finden Sie unterScreencast-Serie „Migrationen“..

Spezifische Migration aktualisieren

update-database -target Migrationsname

Derupdate-database -target MigrationsnameDer Befehl führt die gezielte Migration aus.

Migrationsänderungen an der Datenbank ignorieren

Add-migration MigrationName -ignoreChanges

ignorierenChangesErstellt eine leere Migration mit dem aktuellen Modell als Snapshot.

Code First-Initialisierer

Im Abschnitt „Bereitstellung“ haben Sie Folgendes gesehen:MigrateDatabaseToLatestVersionInitialisierer, der verwendet wird. Code First bietet auch andere Initialisierer, darunterCreateDatabaseIfNotExists(der Standard),DropCreateDatabaseIfModelChanges(die Sie zuvor verwendet haben) undDropCreateDatabaseAlways. DerDropCreateAlwaysDer Initialisierer kann zum Einrichten von Bedingungen für Komponententests hilfreich sein. Sie können auch Ihre eigenen Initialisierer schreiben und einen Initialisierer explizit aufrufen, wenn Sie nicht warten möchten, bis die Anwendung aus der Datenbank liest oder in sie schreibt.

Weitere Informationen zu Initialisierern finden Sie unterGrundlegendes zu Datenbankinitialisierern im Entity Framework-Codeund Kapitel 6 des BuchesProgrammier-Entity-Framework: Code zuerstvon Julie Lerman und Rowan Miller.

Holen Sie sich den Code

Laden Sie das abgeschlossene Projekt herunter

Zusätzliche Ressourcen

Links zu anderen Entity Framework-Ressourcen finden Sie inASP.NET-Datenzugriff – Empfohlene Ressourcen.

Nächste Schritte

In diesem Tutorial werden Sie:

  • Aktivierte Code First-Migrationen
  • Bereitstellung der App in Azure (optional)

Fahren Sie mit dem nächsten Artikel fort, um zu erfahren, wie Sie ein komplexeres Datenmodell für eine ASP.NET MVC-Anwendung erstellen.

Erstellen Sie ein komplexeres Datenmodell

FAQs

How to use migration in asp net MVC? ›

Perform Code First Migration in ASP.Net MVC 5
  1. Introduction. ...
  2. Apply Code First Migration. ...
  3. Step 1: Please disable the Database Initializer in the Web. ...
  4. Step 2: Please change the database name in the Web. ...
  5. Step 3: Open the Package Manager Console and enter the following commands: ...
  6. Editing Seed Method.
Feb 1, 2021

How do I add migration to EF MVC? ›

Go to Visual Studio "Tools -> NuGet Package Manager -> Package Manager Console". Then execute the following command. Enable-Migrations – ( We need to enable the migration, only then can we do the EF Code First Migration ). Add-Migration IntialDb (migration name) – ( Add a migration name and run the command ).

How to enable migration in asp net core MVC? ›

Migrations are enabled by default in EF Core. They are managed by executing commands. If you have Visual Studio, you can use the Package Manager Console (PMC) to manage migrations. Alternatively, you can use a command line tool to execute Entity Framework CLI commands to create a migration.

What is the difference between Dotnet EF migrations and add migration? ›

Both the commands are used to add migrations and internally both works same and use EF Core Tools. The only difference is that one is for PowerShell/Package Manager Console and another one is for Console, So you can run any of these two according to your requirement.

How to transfer data from one page to another in MVC? ›

The following are the syntax to pass the data using ViewData.
  1. ViewData[“name”]=value;
  2. ViewContext. ViewData[“name”]=value;
  3. ViewContext. Controller. ViewData[“name”]=value;
Nov 29, 2015

What is the use of EF migration? ›

The migrations feature in EF Core provides a way to incrementally update the database schema to keep it in sync with the application's data model while preserving existing data in the database.

Videos

1. Von .NET Framework zu .NET Core migrieren oder nicht migrieren | Dr. Holger Schwichtenberg
(BastaConference)
2. .NET Webinar 2022: C# 10 und .NET 6 - Neuerungen und Migration
(M&F Engineering AG)
3. .Net Core JWT-Authentifizierung [Schritt-für-Schritt-Anleitung] – .Net Core JWT-Token
(Coding Droplets)
4. Wie erstellt man Schritt für Schritt eine ASP.Net 6-Web-API mit EF Core?
(Kaushik Roy Chowdhury)
5. Ocelot API Gateway JWT Authentication Tutorial
(Coding Droplets)
6. .NET Docker Tutorial - SQL Server Docker [.NET Docker]
(Coding Droplets)

References

Top Articles
Latest Posts
Article information

Author: Wyatt Volkman LLD

Last Updated: 21/10/2023

Views: 5517

Rating: 4.6 / 5 (66 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Wyatt Volkman LLD

Birthday: 1992-02-16

Address: Suite 851 78549 Lubowitz Well, Wardside, TX 98080-8615

Phone: +67618977178100

Job: Manufacturing Director

Hobby: Running, Mountaineering, Inline skating, Writing, Baton twirling, Computer programming, Stone skipping

Introduction: My name is Wyatt Volkman LLD, I am a handsome, rich, comfortable, lively, zealous, graceful, gifted person who loves writing and wants to share my knowledge and understanding with you.