Freigeben über


ASP.NET Webbereitstellung mit Visual Studio: Bereitstellen eines Datenbankupdates

Von Tom Dykstra

Startprojekt herunterladen

In dieser Lernprogrammreihe wird gezeigt, wie Sie mithilfe von Visual Studio 2012 oder Visual Studio 2010 eine ASP.NET Webanwendung für Azure-App Service Web-Apps oder einem Drittanbieter-Hostinganbieter bereitstellen (veröffentlichen). Informationen zur Reihe finden Sie im ersten Lernprogramm in der Reihe.

Übersicht

In diesem Lernprogramm 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 Lernprogramm zeigt zunächst, wie Sie eine Datenbank aktualisieren, die von Code First-Migrationen verwaltet wird, und später zeigt es, wie Sie eine Datenbank mithilfe des dbDacFx-Anbieters aktualisieren.

Erinnerung: Wenn Beim Durchlaufen des Lernprogramms eine Fehlermeldung angezeigt wird oder etwas nicht funktioniert, überprüfen Sie unbedingt die Problembehandlungsseite.

Bereitstellen einer Datenbankaktualisierung mithilfe von Code First-Migrationen

In diesem Abschnitt fügen Sie der Person Basisklasse für die Student Entitäten Instructor eine Geburtsdatumsspalte hinzu. Anschließend aktualisieren Sie die Seite, auf der Kursleiterdaten angezeigt werden, sodass sie die neue Spalte anzeigt. 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.DAL Person.cs, und fügen Sie die folgende Eigenschaft am Ende der Person Klasse hinzu (es 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 so, dass sie einen Wert für die neue Spalte bereitstellt. Öffnen Sie Migrationen\Configuration.cs , und ersetzen Sie den Codeblock, der mit dem folgenden Codeblock beginnt var instructors = new List<Instructor> , der Informationen zu Geburtsdatumn 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 Lösung, und öffnen Sie dann das Paket-Manager Konsolenfenster. Stellen Sie sicher, dass ContosoUniversity.DAL weiterhin als Standardprojekt ausgewählt ist.

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

    add-migration AddBirthDate
    

    Nach Abschluss dieses Befehls öffnet Visual Studio die Klassendatei, die die neue DbMigration Klasse definiert, und in der Up Methode wird der Code angezeigt, 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 die Änderung zurücksetzen.

    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 noch 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 "Kursleiter"

  1. Öffnen Sie im Projekt ContosoUniversity Instructors.aspx , und fügen Sie ein neues Vorlagenfeld hinzu, um das Geburtsdatum anzuzeigen. Fügen Sie ihn zwischen den Einstellungsterminen und der 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 "Kursleiter" .

    Wenn die Seite geladen wird, sehen Sie, dass sie das neue Geburtsdatum-Feld enthält.

    Screenshot der Seite

  3. Schließen Sie den Browser.

Bereitstellen der Datenbankaktualisierung

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

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

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

  3. Führen Sie die Seite "Kursleiter" 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 erwartete Spalte "Geburtsdatum " mit den darin angezeigten Datumsangaben angezeigt.

  4. Klicken Sie in der Symbolleiste "Web One Click Publish" auf das Staging-Veröffentlichungsprofil , und klicken Sie dann auf "Web veröffentlichen".

  5. Führen Sie die Seite "Kursleiter" im Staging aus, um zu überprüfen, ob das Update erfolgreich bereitgestellt wurde.

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

  7. Führen Sie die Seite "Kursleiter" 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 in der Regel auch während der Bereitstellung offline schalten, indem Sie app_offline.htm verwenden, wie Sie im vorherigen Lernprogramm gesehen haben.

Bereitstellen eines Datenbankupdates mithilfe des dbDacFx-Anbieters

In diesem Abschnitt fügen Sie der Tabelle "Benutzer" in der Mitgliedschaftsdatenbank eine Spalte "Kommentare" 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 (localdb)\v11.0, Erweitern Sie Datenbanken, erweitern Sie aspnet-ContosoUniversity (nicht aspnet-ContosoUniversity-Prod), und erweitern Sie dann Tabellen.

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

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

  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 Spalte "Kommentare " hinzu, und machen Sie sie nvarchar(128) und nullable, und klicken Sie dann auf "Aktualisieren".

    Spalte

  5. Klicken Sie im Feld "Datenbankupdates in der Vorschau" auf "Datenbank aktualisieren".

    Vorschau von Datenbankupdates

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 dann auf "Neues Element".

  2. Erstellen Sie ein neues Webformular mithilfe der Gestaltungsvorlage , und benennen Sie es UserInfo.aspx. Akzeptieren Sie die Standarddatei "Site.Master " als Gestaltungsvorlage.

  3. Kopieren Sie das folgende Markup in das MainContent Content Element (die letzten der drei 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 UserInfo.aspx Seite, und klicken Sie im Browser auf "Anzeigen".

  5. Melden Sie sich mit Ihren Administratorbenutzeranmeldeinformationen an (Kennwort ist devpwd), und fügen Sie einem Benutzer einige Kommentare hinzu, um sicherzustellen, dass die Seite ordnungsgemäß funktioniert.

    Screenshot der UserInfo-Seite mit dem UserName-Test und dem Testkonto von Comment Tom.

  6. Schließen Sie den Browser.

Bereitstellen der Datenbankaktualisierung

Zum Bereitstellen mithilfe des dbDacFx-Anbieters müssen Sie lediglich die Option "Datenbank aktualisieren" im Veröffentlichungsprofil auswählen. Für die erstbereitstellung, wenn 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 zum Veröffentlichen von Web, 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 Einstellungen.

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

  5. Deaktivieren Sie die zusätzlichen Skripts, die Sie für die erstbereitstellung konfiguriert haben:

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

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

    Datenbankvorschau

    Das Vorschaufenster zeigt das Skript, das in der Zieldatenbank ausgeführt wird, damit 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 auf der Startseite geöffnet.

  9. Führen Sie die UserInfo-Seite (Konto/UserInfo.aspx zur Startseiten-URL hinzufügen) aus, um zu überprüfen, ob das Update erfolgreich bereitgestellt wurde. Sie müssen sich anmelden, indem Sie Administrator und Devpwd eingeben.

    Daten in Tabellen werden nicht standardmäßig bereitgestellt, und Sie haben kein Auszuführende Skript für die Datenbereitstellung konfiguriert, sodass Sie den Kommentar, den Sie in der Entwicklung hinzugefügt haben, nicht finden. Sie können jetzt im 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 dasselbe Verfahren aus, um sie für Staging und Produktion bereitzustellen.

    Vergessen Sie nicht, die zusätzlichen Skripts zu deaktivieren. Der einzige Unterschied im Vergleich zum Testprofil besteht darin, dass Sie nur ein Skript in den Staging- und Produktionsprofilen deaktivieren, da sie so konfiguriert wurden, dass nur aspnet-prod-data.sql ausgeführt werden.

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

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

Zusammenfassung

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

Screenshot der Seite

Screenshot der UserInfo-Seite mit dem UserName-Test und dem Testkonto von Comment Tom.

Im nächsten Lernprogramm erfahren Sie, wie Sie Bereitstellungen mithilfe der Befehlszeile ausführen.