- 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 ändernDbContext
Wenn 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.
Deaktivieren Sie den Initialisierer, den Sie zuvor eingerichtet haben, indem Sie ihn auskommentieren oder löschen
Kontexte
Element, das Sie der Web.config-Datei der Anwendung hinzugefügt haben.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.
Von demWerkzeugMenü auswählenNuGet-Paketmanager>Paket-Manager-Konsole.
Bei der
PN>
Eingabeaufforderung Geben Sie die folgenden Befehle ein:enable-migrationsadd-migration InitialCreate
Der
Enable-Migrationen
Der 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 aus
Add-Migration
Befehl. 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 bringen
Befehl passiert nichts, da die Datenbank bereits existiert.)Öffne dasContosoUniversity\Migrations\Configuration.csDatei. Wie die Initialisierungsklasse, die Sie zuvor gesehen haben, ist die
Aufbau
Die Klasse umfasst aSamen
Methode.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 InitialisierungsklasseSamen
Methode 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 nichtSamen
Methode zum Einfügen von Testdaten, wenn Sie Migrationen verwenden, um die Datenbank in der Produktion bereitzustellen, da dieSamen
Die Methode wird in der Produktion ausgeführt. In diesem Fall möchten Sie dasSamen
Methode, 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ältAbteilung
Tabelle, 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.
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 das
Samen
Die Methode wird jedes Mal ausgeführt, wenn Sie die ausführenDatenbank auf den neusten Stand bringen
Normalerweise 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, Nachname
Die 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 zum
AddOrUpdate
Methode, sieheSeien Sie vorsichtig mit der AddOrUpdate-Methode von EF 4.3auf Julie Lermans Blog.Der Code, der erstellt
Einschreibung
Entities gehen davon aus, dass Sie das habenAUSWEIS
Wert in den Entitäten in derStudenten
Sammlung, 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 ... benutzen
AUSWEIS
Eigentum hier, weil dieAUSWEIS
Der Wert wird beim Aufruf eingestelltÄnderungen speichern
für dieStudenten
Sammlung. EF ruft automatisch den Primärschlüsselwert ab, wenn es eine Entität in die Datenbank einfügt, und aktualisiert diesenAUSWEIS
Eigenschaft der Entität im Gedächtnis.Der Code, der jedes hinzufügt
Einschreibung
Entität zumAnmeldungen
Das Entitätsset verwendet das nichtAddOrUpdate
Methode. 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 vonEinschreibung
Auffü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); }}
Erstellen Sie das Projekt.
Führen Sie die erste Migration durch
Als Sie das ausgeführt habenAdd-Migration
Mit 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 NamenHoch
Methode derInitialCreate
Die Klasse erstellt die Datenbanktabellen, die den Entitätssätzen des Datenmodells entsprechen, und dieRunter
Methode 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 dasHoch
Methode zum Implementieren der Datenmodelländerungen für eine Migration. Wenn Sie einen Befehl zum Zurücksetzen des Updates eingeben, ruft Migrations den aufRunter
Methode.
Dies ist die anfängliche Migration, die erstellt wurde, als Sie das eingegeben habenAdd-Migration InitialCreate
Befehl. Der Parameter (InitialCreate
im 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.
ImPaket-Manager-KonsoleGeben Sie im Fenster den folgenden Befehl ein:
Datenbank auf den neusten Stand bringen
Der
Datenbank auf den neusten Stand bringen
Der Befehl führt den ausHoch
Methode zum Erstellen der Datenbank und führt dann die ausSamen
Methode 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.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 verwendetMigrateDatabaseToLatestVersion
Initialisierungsklasse.
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 MigrationenSamen
Methode 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 schreibenSamen
Methode, 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 schreibenSamen
Methode, 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.
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.
Das Formular zum Erstellen eines neuenNeue Web-App + SQLRessource wird geöffnet.
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.
ImAbonnementWählen Sie im Feld das Azure-Abonnement aus, in dem Sie das möchtenApp-Servicewohnen.
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.
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).
KlickenSQL-Datenbank, und wählen Sie dannErstellen Sie eine neue Datenbankoder wählen Sie eine vorhandene Datenbank aus.
ImNameGeben Sie im Feld einen Namen für Ihre Datenbank ein.
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.
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.
ÄndernKollationwie benötigt.
(Video) Lernen Sie ASP.Net MVC 6 in einem Video kennenGeben 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.
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.
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
Klicken Sie in Visual Studio mit der rechten Maustaste auf das ProjektLösungsforscherund auswählenVeröffentlichenaus dem Kontextmenü.
Auf derWählen Sie ein VeröffentlichungszielSeite, wählen SieApp-Serviceund dannWählen Sie Vorhanden aus, und wählen Sie dannVeröffentlichen.
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.
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.
DerAusgangDas Fenster zeigt an, welche Bereitstellungsaktionen durchgeführt wurden, und meldet den erfolgreichen Abschluss der Bereitstellung.
Nach erfolgreicher Bereitstellung öffnet sich der Standardbrowser automatisch mit der URL der bereitgestellten Website.
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):
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.
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.
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 Migrationsname
Der Befehl führt die gezielte Migration aus.
Migrationsänderungen an der Datenbank ignorieren
Add-migration MigrationName -ignoreChanges
ignorierenChanges
Erstellt 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. DerDropCreateAlways
Der 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? ›
- Introduction. ...
- Apply Code First Migration. ...
- Step 1: Please disable the Database Initializer in the Web. ...
- Step 2: Please change the database name in the Web. ...
- Step 3: Open the Package Manager Console and enter the following commands: ...
- Editing Seed Method.
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? ›- ViewData[“name”]=value;
- ViewContext. ViewData[“name”]=value;
- ViewContext. Controller. ViewData[“name”]=value;
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.