ASP.NET wdrażanie w Internecie przy użyciu programu Visual Studio: wdrażanie aktualizacji bazy danych

Autor : Tom Dykstra

Pobierz projekt startowy

W tej serii samouczków pokazano, jak wdrożyć (opublikować) aplikację internetową ASP.NET w celu Azure App Service Web Apps lub dostawcy hostingu innej firmy przy użyciu programu Visual Studio 2012 lub Visual Studio 2010. Aby uzyskać informacje o serii, zobacz pierwszy samouczek z serii.

Omówienie

W tym samouczku wprowadzisz zmianę bazy danych i powiązane zmiany kodu, przetestujesz zmiany w programie Visual Studio, a następnie wdrożysz aktualizację w środowiskach testowych, przejściowych i produkcyjnych.

W samouczku najpierw pokazano, jak zaktualizować bazę danych zarządzaną przez Migracje Code First, a następnie pokazać, jak zaktualizować bazę danych przy użyciu dostawcy dbDacFx.

Przypomnienie: Jeśli zostanie wyświetlony komunikat o błędzie lub coś nie działa podczas pracy z samouczkiem, pamiętaj, aby sprawdzić stronę rozwiązywania problemów.

Wdrażanie aktualizacji bazy danych przy użyciu Migracje Code First

W tej sekcji dodasz kolumnę daty urodzenia do klasy bazowej Person dla jednostek Student i Instructor . Następnie zaktualizujesz stronę, na której są wyświetlane dane instruktora, tak aby wyświetlała nową kolumnę. Na koniec wdrażasz zmiany w celu testowania, przemieszczania i produkcji.

Dodawanie kolumny do tabeli w bazie danych aplikacji

  1. W projekcie ContosoUniversity.DAL otwórz plik Person.cs i dodaj następującą właściwość na końcu Person klasy (powinny istnieć dwa zamykające nawiasy klamrowe po nim):

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

    Następnie zaktualizuj metodę Seed tak, aby dostarczała wartość dla nowej kolumny. Otwórz plik Migrations\Configuration.cs i zastąp blok kodu rozpoczynający się var instructors = new List<Instructor> następującym blokiem kodu, który zawiera informacje o dacie urodzenia:

    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. Skompiluj rozwiązanie, a następnie otwórz okno Konsola menedżera pakietów . Upewnij się, że opcja ContosoUniversity.DAL jest nadal zaznaczona jako projekt Domyślny.

  3. W oknie Konsola menedżera pakietów wybierz pozycję ContosoUniversity.DAL jako projekt domyślny, a następnie wprowadź następujące polecenie:

    add-migration AddBirthDate
    

    Po zakończeniu tego polecenia program Visual Studio otworzy plik klasy, który definiuje nową DbMigration klasę, a w Up metodzie zobaczysz kod, który tworzy nową kolumnę. Metoda Up tworzy kolumnę podczas implementowania zmiany, a Down metoda usuwa kolumnę podczas wycofywania zmiany.

    AddBirthDate_migration_code

  4. Skompiluj rozwiązanie, a następnie wprowadź następujące polecenie w oknie Konsola menedżera pakietów (upewnij się, że projekt ContosoUniversity.DAL jest nadal zaznaczony):

    update-database
    

    Program Entity Framework uruchamia metodę Up , a następnie uruchamia metodę Seed .

Wyświetlanie nowej kolumny na stronie Instruktorzy

  1. W projekcie ContosoUniversity otwórz plik Instructors.aspx i dodaj nowe pole szablonu, aby wyświetlić datę urodzenia. Dodaj go między tymi dla daty zatrudnienia i przydziału biura:

    <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>
    

    (Jeśli wcięcie kodu zostanie wycofane z synchronizacji, możesz nacisnąć klawisze CTRL-K, a następnie nacisnąć klawisze CTRL-D, aby automatycznie ponownie sformatować plik).

  2. Uruchom aplikację i kliknij link Instruktorzy .

    Po załadowaniu strony zobaczysz, że ma ono nowe pole daty urodzenia.

    Zrzut ekranu przedstawiający stronę Instruktorzy z nazwami, datą zatrudnienia, datą urodzenia i przypisaniem pakietu Office.

  3. Zamknij okno przeglądarki.

Wdrażanie aktualizacji bazy danych

  1. W Eksplorator rozwiązań wybierz projekt ContosoUniversity.

  2. Na pasku narzędzi Publikowanie w sieci Web jednym kliknięciem kliknij profil publikowania testowego , a następnie kliknij pozycję Publikuj w sieci Web. (Jeśli pasek narzędzi jest wyłączony, wybierz projekt ContosoUniversity w Eksplorator rozwiązań).

    Program Visual Studio wdraża zaktualizowaną aplikację, a przeglądarka zostanie otwarta na stronie głównej.

  3. Uruchom stronę Instruktorzy , aby sprawdzić, czy aktualizacja została pomyślnie wdrożona.

    Gdy aplikacja próbuje uzyskać dostęp do bazy danych dla tej strony, Code First aktualizuje schemat bazy danych i uruchamia metodę Seed . Po wyświetleniu strony zostanie wyświetlona oczekiwana kolumna Data urodzenia z datami w nim.

  4. Na pasku narzędzi Publikowanie w sieci Web jednym kliknięciem kliknij profil Publikowania przejściowego , a następnie kliknij pozycję Publikuj w sieci Web.

  5. Uruchom stronę Instruktorzy w środowisku przejściowym, aby sprawdzić, czy aktualizacja została pomyślnie wdrożona.

  6. Na pasku narzędzi Publikowanie w sieci Web jednym kliknięciem kliknij profil Publikowania produkcyjnego , a następnie kliknij pozycję Publikuj w sieci Web.

  7. Uruchom stronę Instruktorzy w środowisku produkcyjnym, aby sprawdzić, czy aktualizacja została pomyślnie wdrożona.

    W przypadku rzeczywistej aktualizacji aplikacji produkcyjnej, która zawiera zmianę bazy danych, zwykle przełączysz aplikację w tryb offline podczas wdrażania przy użyciu app_offline.htm, jak pokazano w poprzednim samouczku.

Wdrażanie aktualizacji bazy danych przy użyciu dostawcy dbDacFx

W tej sekcji dodasz kolumnę Komentarze do tabeli Użytkownik w bazie danych członkostwa i utworzysz stronę umożliwiającą wyświetlanie i edytowanie komentarzy dla każdego użytkownika. Następnie wdrażasz zmiany w celu testowania, przemieszczania i produkcji.

Dodawanie kolumny do tabeli w bazie danych członkostwa

  1. W programie Visual Studio otwórz SQL Server Eksplorator obiektów.

  2. Rozwiń węzeł (localdb)\v11.0, rozwiń węzeł Bazy danych, rozwiń węzeł aspnet-ContosoUniversity (nie aspnet-ContosoUniversity-Prod), a następnie rozwiń węzeł Tabele.

    Jeśli nie widzisz pozycji (localdb)\v11.0 w węźle SQL Server, kliknij prawym przyciskiem myszy węzeł SQL Server i kliknij polecenie Dodaj SQL Server. W oknie dialogowym Łączenie z serwerem wprowadź wartość (localdb)\v11.0 jako nazwę serwera, a następnie kliknij przycisk Połącz.

    Jeśli nie widzisz elementu aspnet-ContosoUniversity, uruchom projekt i zaloguj się przy użyciu poświadczeń administratora (hasło to devpwd), a następnie odśwież okno SQL Server Eksplorator obiektów.

  3. Kliknij prawym przyciskiem myszy tabelę Użytkownicy, a następnie kliknij polecenie Wyświetl Projektant.

    Projektant widoku SSOX

  4. W projektancie dodaj kolumnę Komentarze i ustaw ją jako nvarchar(128) i dopuszczaną wartość null, a następnie kliknij przycisk Aktualizuj.

    Dodawanie kolumny Komentarze

  5. W polu Baza danych w wersji zapoznawczej Aktualizacje kliknij pozycję Aktualizuj bazę danych.

    Aktualizacje bazy danych w wersji zapoznawczej

Tworzenie strony do wyświetlania i edytowania nowej kolumny

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy folder Account w projekcie ContosoUniversity, kliknij pozycję Dodaj, a następnie kliknij pozycję Nowy element.

  2. Utwórz nowy formularz sieci Web przy użyciu strony wzorcowej i nadaj mu nazwę UserInfo.aspx. Zaakceptuj domyślny plik Site.Master jako stronę wzorcową.

  3. Skopiuj następujące znaczniki do MainContentContent elementu (ostatnie z 3 Content elementów):

    <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. Kliknij prawym przyciskiem myszy stronę UserInfo.aspx i kliknij polecenie Wyświetl w przeglądarce.

  5. Zaloguj się przy użyciu poświadczeń użytkownika administratora (hasło to devpwd) i dodaj komentarze do użytkownika, aby sprawdzić, czy strona działa prawidłowo.

    Zrzut ekranu przedstawiający stronę UserInfo z wyświetlonym testem UserName i kontem testowym Comment Tom.

  6. Zamknij okno przeglądarki.

Wdrażanie aktualizacji bazy danych

Aby wdrożyć za pomocą dostawcy dbDacFx, wystarczy wybrać opcję Aktualizuj bazę danych w profilu publikowania. Jednak w przypadku początkowego wdrożenia w przypadku użycia tej opcji skonfigurowano również kilka dodatkowych skryptów SQL do uruchomienia: nadal znajdują się one w profilu i trzeba będzie zapobiec ich ponownemu uruchomieniu.

  1. Otwórz Kreatora publikowania w sieci Web , klikając prawym przyciskiem myszy projekt ContosoUniversity i klikając pozycję Publikuj.

  2. Wybierz profil testowy .

  3. Kliknij kartę Ustawienia.

  4. W obszarze DomyślnePołączenie wybierz pozycję Aktualizuj bazę danych.

  5. Wyłącz dodatkowe skrypty skonfigurowane do uruchamiania dla początkowego wdrożenia:

    1. Kliknij pozycję Konfiguruj aktualizacje bazy danych.
    2. W oknie dialogowym Konfigurowanie Aktualizacje bazy danych wyczyść pola wyboru obok pól Grant.sql i aspnet-data-dev.sql.
    3. Kliknij przycisk Zamknij.
  6. Kliknij kartę Podgląd .

  7. W obszarze Bazy danych i po prawej stronie pozycji DefaultConnection kliknij link Podgląd bazy danych .

    Podgląd bazy danych

    W oknie podglądu zostanie wyświetlony skrypt, który zostanie uruchomiony w docelowej bazie danych, aby schemat tej bazy danych był zgodny ze schematem źródłowej bazy danych. Skrypt zawiera polecenie ALTER TABLE, które dodaje nową kolumnę.

  8. Zamknij okno dialogowe Podgląd bazy danych , a następnie kliknij pozycję Publikuj.

    Program Visual Studio wdraża zaktualizowaną aplikację, a przeglądarka zostanie otwarta na stronie głównej.

  9. Uruchom stronę UserInfo (dodaj ciąg Account/UserInfo.aspx do adresu URL strony głównej), aby sprawdzić, czy aktualizacja została pomyślnie wdrożona. Musisz się zalogować, wprowadzając ciąg admin i devpwd.

    Dane w tabelach nie są domyślnie wdrażane i nie skonfigurowano skryptu wdrażania danych do uruchomienia, więc nie znajdziesz komentarza dodanego do programowania. Możesz teraz dodać nowy komentarz w środowisku przejściowym, aby sprawdzić, czy zmiana została wdrożona w bazie danych, a strona działa prawidłowo.

  10. Wykonaj tę samą procedurę, aby wdrożyć w środowisku przejściowym i produkcyjnym.

    Nie zapomnij wyłączyć dodatkowych skryptów. Jedyną różnicą w porównaniu z profilem testowym jest wyłączenie tylko jednego skryptu w profilach przejściowych i produkcyjnych, ponieważ zostały one skonfigurowane do uruchamiania tylko aspnet-prod-data.sql.

    Poświadczenia dla środowiska przejściowego i produkcyjnego to administrator i prodpwd.

    W przypadku rzeczywistej aktualizacji aplikacji produkcyjnej, która zawiera zmianę bazy danych, zwykle przełączysz aplikację w tryb offline podczas wdrażania, przekazując app_offline.htm przed opublikowaniem i usunięciem jej później, jak pokazano w poprzednim samouczku.

Podsumowanie

Wdrożono teraz aktualizację aplikacji, która zawierała zmianę bazy danych przy użyciu zarówno Migracje Code First, jak i dostawcy dbDacFx.

Zrzut ekranu przedstawiający stronę Instruktorzy z wyświetloną nazwą, datą zatrudnienia, datą urodzenia i przypisaniem pakietu Office.

Zrzut ekranu przedstawiający stronę UserInfo z testem UserName i kontem testowym Comment Tom.

W następnym samouczku pokazano, jak wykonywać wdrożenia przy użyciu wiersza polecenia.