ASP.NET Webbereitstellung mit Visual Studio: Bereitstellen eines Datenbankupdates

von Tom Dykstra

Starter-Projekt herunterladen

In dieser Tutorialreihe erfahren Sie, wie Sie mithilfe von Visual Studio 2012 oder Visual Studio 2010 eine ASP.NET Webanwendung für Azure App Service Web-Apps oder für einen Hostinganbieter eines Drittanbieters bereitstellen (veröffentlichen). Informationen zur Reihe finden Sie im ersten Tutorial der Reihe.

Überblick

In diesem Tutorial nehmen Sie eine Datenbankänderung und zugehörige Codeänderungen vor, testen die Änderungen in Visual Studio und stellen dann das Update in den Test-, Staging- und Produktionsumgebungen bereit.

Das Tutorial zeigt zunächst, wie eine Datenbank aktualisiert wird, die von Code First-Migrationen verwaltet wird, und später wird gezeigt, wie eine Datenbank mithilfe des dbDacFx-Anbieters aktualisiert wird.

Erinnerung: Wenn Sie eine Fehlermeldung erhalten oder etwas nicht funktioniert, während Sie das Tutorial durchlaufen, überprüfen Sie unbedingt die Problembehandlungsseite.

Bereitstellen eines Datenbankupdates mithilfe von Code First-Migrationen

In diesem Abschnitt fügen Sie der Basisklasse für die Person Entitäten und Instructor eine Spalte zum Student Geburtsdatum hinzu. Anschließend aktualisieren Sie die Seite, auf der Kursleiterdaten angezeigt werden, sodass die neue Spalte angezeigt wird. Schließlich stellen Sie die Änderungen für Test, Staging und Produktion bereit.

Hinzufügen einer Spalte zu einer Tabelle in der Anwendungsdatenbank

  1. Öffnen Sie im Projekt ContosoUniversity.DALPerson.cs , und fügen Sie am Ende der Klasse die Person folgende Eigenschaft hinzu (darauf sollten zwei schließende geschweifte Klammern folgen):

    [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
    [Display(Name = "Birth Date")]
    public DateTime? BirthDate { get; set; }
    

    Aktualisieren Sie als Nächstes die Seed -Methode, sodass sie einen Wert für die neue Spalte bereitstellt. Öffnen Sie Migrations\Configuration.cs , und ersetzen Sie den Codeblock, der mit dem folgenden Codeblock beginnt var instructors = new List<Instructor> , der Informationen zum Geburtsdatum enthält:

    var instructors = new List<Instructor>
    {
        new Instructor { FirstMidName = "Kim",     LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), BirthDate = DateTime.Parse("1918-08-12"), OfficeAssignment = new OfficeAssignment { Location = "Smith 17" } },
        new Instructor { FirstMidName = "Fadi",    LastName = "Fakhouri",    HireDate = DateTime.Parse("2002-07-06"), BirthDate = DateTime.Parse("1960-03-15"), OfficeAssignment = new OfficeAssignment { Location = "Gowan 27" } },
        new Instructor { FirstMidName = "Roger",   LastName = "Harui",       HireDate = DateTime.Parse("1998-07-01"), BirthDate = DateTime.Parse("1970-01-11"), OfficeAssignment = new OfficeAssignment { Location = "Thompson 304" } },
        new Instructor { FirstMidName = "Candace", LastName = "Kapoor",      HireDate = DateTime.Parse("2001-01-15"), BirthDate = DateTime.Parse("1975-04-11") },
        new Instructor { FirstMidName = "Roger",   LastName = "Zheng",       HireDate = DateTime.Parse("2004-02-12"), BirthDate = DateTime.Parse("1957-10-12") }
    };
    
  2. Erstellen Sie die Projektmappe, und öffnen Sie dann das Fenster Paket-Manager-Konsole . Stellen Sie sicher, dass ContosoUniversity.DAL weiterhin als Standardprojekt ausgewählt ist.

  3. Wählen Sie im Fenster Paket-Manager-Konsoledie Option ContosoUniversity.DAL als Standardprojekt aus, und geben Sie dann den folgenden Befehl ein:

    add-migration AddBirthDate
    

    Wenn dieser Befehl abgeschlossen ist, öffnet Visual Studio die Klassendatei, die die neue DbMigration Klasse definiert, und in der Up -Methode sehen Sie den Code, der die neue Spalte erstellt. Die Up -Methode erstellt die Spalte, wenn Sie die Änderung implementieren, und die Down -Methode löscht die Spalte, wenn Sie ein Rollback für die Änderung durchführen.

    AddBirthDate_migration_code

  4. Erstellen Sie die Projektmappe, und geben Sie dann den folgenden Befehl im Fenster Paket-Manager-Konsole ein (stellen Sie sicher, dass das Projekt ContosoUniversity.DAL weiterhin ausgewählt ist):

    update-database
    

    Das Entity Framework führt die Up -Methode aus und führt dann die Seed -Methode aus.

Anzeigen der neuen Spalte auf der Seite "Dozenten"

  1. Öffnen Sie im Projekt ContosoUniversity Instructors.aspx , und fügen Sie ein neues Vorlagenfeld hinzu, um das Geburtsdatum anzuzeigen. Fügen Sie es zwischen den Für mietdatum und bürozuweisung hinzu:

    <asp:TemplateField HeaderText="Hire Date" SortExpression="HireDate">
        <ItemTemplate>
            <asp:Label ID="InstructorHireDateLabel" runat="server" Text='<%# Eval("HireDate", "{0:d}") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorHireDateTextBox" runat="server" Text='<%# Bind("HireDate", "{0:d}") %>' Width="7em"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Birth Date" SortExpression="BirthDate">
        <ItemTemplate>
            <asp:Label ID="InstructorBirthDateLabel" runat="server" Text='<%# Eval("BirthDate", "{0:d}") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorBirthDateTextBox" runat="server" Text='<%# Bind("BirthDate", "{0:d}") %>'
                Width="7em"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    <asp:TemplateField HeaderText="Office Assignment" SortExpression="OfficeAssignment.Location">
        <ItemTemplate>
            <asp:Label ID="InstructorOfficeLabel" runat="server" Text='<%# Eval("OfficeAssignment.Location") %>'></asp:Label>
        </ItemTemplate>
        <EditItemTemplate>
            <asp:TextBox ID="InstructorOfficeTextBox" runat="server"
                Text='<%# Eval("OfficeAssignment.Location") %>' Width="7em"
                OnInit="InstructorOfficeTextBox_Init"></asp:TextBox>
        </EditItemTemplate>
    </asp:TemplateField>
    

    (Wenn der Codeeinzug nicht mehr synchronisiert wird, können Sie STRG-K und dann STRG-D drücken, um die Datei automatisch neu zu formatieren.)

  2. Führen Sie die Anwendung aus, und klicken Sie auf den Link Dozenten .

    Wenn die Seite geladen wird, sehen Sie, dass sie über das neue Feld "Geburtsdatum" verfügt.

    Screenshot der Seite

  3. Schließen Sie den Browser.

Bereitstellen des Datenbankupdates

  1. Wählen Sie in Projektmappen-Explorer das Projekt ContosoUniversity aus.

  2. Klicken Sie in der Symbolleiste Web One Auf Veröffentlichen , klicken Sie auf das Veröffentlichungsprofil testen , und klicken Sie dann auf Web veröffentlichen. (Wenn die Symbolleiste deaktiviert ist, wählen Sie das Projekt ContosoUniversity in Projektmappen-Explorer aus.)

    Visual Studio stellt die aktualisierte Anwendung bereit, und der Browser wird mit der Startseite geöffnet.

  3. Führen Sie die Seite Dozenten aus, um zu überprüfen, ob das Update erfolgreich bereitgestellt wurde.

    Wenn die Anwendung versucht, auf die Datenbank für diese Seite zuzugreifen, aktualisiert Code First das Datenbankschema und führt die Seed -Methode aus. Wenn die Seite angezeigt wird, wird die Spalte " Erwartetes Geburtsdatum " mit Datumsangaben angezeigt.

  4. Klicken Sie in der Symbolleiste Web One auf Veröffentlichen, klicken Sie auf das Stagingveröffentlichungsprofil, und klicken Sie dann auf Web veröffentlichen.

  5. Führen Sie die Seite Dozenten in der Stagingphase aus, um zu überprüfen, ob das Update erfolgreich bereitgestellt wurde.

  6. Klicken Sie in der Symbolleiste Web One Auf Veröffentlichen , klicken Sie auf das Produktionsveröffentlichungsprofil , und klicken Sie dann auf Web veröffentlichen.

  7. Führen Sie die Seite Dozenten in der Produktion aus, um zu überprüfen, ob das Update erfolgreich bereitgestellt wurde.

    Bei einem echten Produktionsanwendungsupdate, das eine Datenbankänderung enthält, würden Sie die Anwendung normalerweise auch während der Bereitstellung offline schalten, indem Sie app_offline.htmverwenden, wie Sie im vorherigen Tutorial gesehen haben.

Bereitstellen eines Datenbankupdates mithilfe des anbieters dbDacFx

In diesem Abschnitt fügen Sie der Tabelle Benutzer in der Mitgliedschaftsdatenbank eine Kommentarspalte hinzu und erstellen eine Seite, auf der Sie Kommentare für jeden Benutzer anzeigen und bearbeiten können. Anschließend stellen Sie die Änderungen für Test, Staging und Produktion bereit.

Hinzufügen einer Spalte zu einer Tabelle in der Mitgliedschaftsdatenbank

  1. Öffnen Sie in Visual Studio SQL Server Objekt-Explorer.

  2. Erweitern Sie (localdb)\v11.0, Datenbanken, aspnet-ContosoUniversity (nicht aspnet-ContosoUniversity-Prod) und dann Tabellen.

    Wenn (localdb)\v11.0 unter dem knoten SQL Server nicht angezeigt wird, klicken Sie mit der rechten Maustaste auf den Knoten SQL Server, und klicken Sie auf SQL Server hinzufügen. Geben Sie im Dialogfeld Verbindung mit Server herstellen(localdb)\v11.0 als Servernamen ein, und klicken Sie dann auf Verbinden.

    Wenn aspnet-ContosoUniversity nicht angezeigt wird, führen Sie das Projekt aus, melden Sie sich mit den Administratoranmeldeinformationen an (Kennwort ist devpwd), und aktualisieren Sie dann das fenster SQL Server Objekt-Explorer.

  3. Klicken Sie mit der rechten Maustaste auf die Tabelle Benutzer, und klicken Sie dann auf Designer anzeigen.

    SSOX View Designer

  4. Fügen Sie im Designer eine Kommentarspalte hinzu, stellen Sie sie als nvarchar(128) und NULLable fest, und klicken Sie dann auf Aktualisieren.

    Hinzufügen der Kommentarspalte

  5. Klicken Sie im Feld Vorschaudatenbank Updates auf Datenbank aktualisieren.

    Datenbankvorschau Updates

Erstellen einer Seite zum Anzeigen und Bearbeiten der neuen Spalte

  1. Klicken Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Ordner Konto im Projekt ContosoUniversity, klicken Sie auf Hinzufügen, und klicken Sie dann auf Neues Element.

  2. Erstellen Sie mithilfe der Gestaltungsvorlage ein neues Webformular , und nennen Sie es UserInfo.aspx. Übernehmen Sie die Standarddatei Site.Master als master Seite.

  3. Kopieren Sie das folgende Markup in das MainContentContent Element (das letzte der 3 Content Elemente):

    <h2>User Information</h2>
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
            SelectCommand="SELECT UserId, UserName, Comments FROM [Users]" 
            UpdateCommand="UPDATE [Users] SET [UserName] = @UserName, [Comments] = @Comments WHERE [UserId] = @UserId">
            <DeleteParameters>
                <asp:Parameter Name="UserId" Type="Object" />
            </DeleteParameters>
            <UpdateParameters>
                <asp:Parameter Name="UserId" Type="Object" />
                <asp:Parameter Name="UserName" Type="String" />
                <asp:Parameter Name="Comments" Type="String" />
            </UpdateParameters>
        </asp:SqlDataSource>
    
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="UserId" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:CommandField ShowEditButton="True" />
                <asp:BoundField DataField="UserName" HeaderText="UserName" SortExpression="UserName" />
                <asp:BoundField DataField="Comments" HeaderText="Comments" SortExpression="Comments" />
            </Columns>
        </asp:GridView>
    
  4. Klicken Sie mit der rechten Maustaste auf die Seite UserInfo.aspx , und klicken Sie dann auf Im Browser anzeigen.

  5. Melden Sie sich mit Ihren Administratorbenutzeranmeldeinformationen an (kennwort ist devpwd), und fügen Sie einem Benutzer einige Kommentare hinzu, um zu überprüfen, ob die Seite ordnungsgemäß funktioniert.

    Screenshot: Seite

  6. Schließen Sie den Browser.

Bereitstellen des Datenbankupdates

Zum Bereitstellen mithilfe des Anbieters dbDacFx müssen Sie nur die Option Datenbank aktualisieren im Veröffentlichungsprofil auswählen. Für die anfängliche Bereitstellung, als Sie diese Option verwendet haben, haben Sie jedoch auch einige zusätzliche SQL-Skripts für die Ausführung konfiguriert: Diese befinden sich noch im Profil, und Sie müssen verhindern, dass sie erneut ausgeführt werden.

  1. Öffnen Sie den Assistenten Web veröffentlichen , indem Sie mit der rechten Maustaste auf das Projekt ContosoUniversity klicken und auf Veröffentlichen klicken.

  2. Wählen Sie das Testprofil aus.

  3. Klicken Sie auf die Registerkarte Settings .

  4. Wählen Sie unter StandardVerbindung die Option Datenbank aktualisieren aus.

  5. Deaktivieren Sie die zusätzlichen Skripts, die Sie für die Ausführung für die erste Bereitstellung konfiguriert haben:

    1. Klicken Sie auf Datenbankupdates konfigurieren.
    2. Deaktivieren Sie im Dialogfeld Datenbank konfigurieren Updates die Kontrollkästchen neben Grant.sql und aspnet-data-dev.sql.
    3. Klicke auf Schließen.
  6. Klicken Sie auf die Registerkarte Vorschau .

  7. Klicken Sie unter Datenbanken und rechts neben DefaultConnection auf den Link Vorschaudatenbank .

    Datenbankvorschau

    Im Vorschaufenster wird das Skript angezeigt, das in der Zieldatenbank ausgeführt wird, um sicherzustellen, dass das Datenbankschema mit dem Schema der Quelldatenbank übereinstimmt. Das Skript enthält einen ALTER TABLE-Befehl, der die neue Spalte hinzufügt.

  8. Schließen Sie das Dialogfeld Datenbankvorschau , und klicken Sie dann auf Veröffentlichen.

    Visual Studio stellt die aktualisierte Anwendung bereit, und der Browser wird mit der Startseite geöffnet.

  9. Führen Sie die Seite UserInfo aus (fügen Sie account/UserInfo.aspx zur Homepage-URL hinzu), um zu überprüfen, ob das Update erfolgreich bereitgestellt wurde. Sie müssen sich anmelden, indem Sie admin und devpwd eingeben.

    Daten in Tabellen werden nicht standardmäßig bereitgestellt, und Sie haben kein Datenbereitstellungsskript für die Ausführung konfiguriert, sodass Sie den Kommentar, den Sie in der Entwicklung hinzugefügt haben, nicht finden. Sie können jetzt in staging einen neuen Kommentar hinzufügen, um zu überprüfen, ob die Änderung in der Datenbank bereitgestellt wurde und die Seite ordnungsgemäß funktioniert.

  10. Führen Sie das gleiche Verfahren für die Bereitstellung in Staging und Produktion aus.

    Vergessen Sie nicht, die zusätzlichen Skripts zu deaktivieren. Der einzige Unterschied zum Testprofil besteht darin, dass Sie nur ein Skript in den Staging- und Produktionsprofilen deaktivieren, da diese nur für die Ausführung von aspnet-prod-data.sql konfiguriert wurden.

    Die Anmeldeinformationen für Staging und Produktion sind admin und prodpwd.

    Bei einem echten Produktionsanwendungsupdate, das eine Datenbankänderung enthält, würden Sie die Anwendung normalerweise während der Bereitstellung offline schalten, indem Sie app_offline.htm hochladen, bevor Sie sie veröffentlichen und anschließend löschen, wie Sie im vorherigen Tutorial gesehen haben.

Zusammenfassung

Sie haben nun ein Anwendungsupdate bereitgestellt, das eine Datenbankänderung mit Code First-Migrationen und dem DbDacFx-Anbieter enthielt.

Screenshot: Seite

Screenshot der Seite

Im nächsten Tutorial erfahren Sie, wie Sie Bereitstellungen über die Befehlszeile ausführen.