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 do usługi Azure App Service Web Apps lub do dostawcy hostingu innej firmy, korzystając z 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 pokazano, 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.

Wdróż aktualizację bazy danych przy użyciu Code First Migrations

W tej sekcji dodasz kolumnę daty urodzenia do klasy bazowej Person dla jednostek Student i Instructor . Następnie zaktualizujesz stronę wyświetlającą dane instruktora, tak aby wyświetlała nową kolumnę. Na koniec wdrażasz zmiany w środowisku testowym, stagingowym oraz produkcyjnym.

Dodawanie kolumny do tabeli w bazie danych aplikacji

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

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

    Następnie zaktualizuj metodę Seed , aby zapewnić jej 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 zawierającym 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 konsoli Menedżer pakietów. Upewnij się, że opcja ContosoUniversity.DAL jest nadal zaznaczona jako projekt domyślny.

  3. W oknie konsoli Menedżer 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 otwiera plik klasy definiujący nową DbMigration klasę, a w Up metodzie można zobaczyć 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 konsoli Menedżer 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 Instructors.aspx i dodaj nowe pole szablonu, aby wyświetlić datę urodzenia. Dodaj go między tymi, które dotyczą daty zatrudnienia i przypisania 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 traci synchronizację, możesz nacisnąć CTRL-K, a następnie CTRL-D, aby automatycznie zreformatować 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 nazwą, datą zatrudnienia, datą urodzenia i przypisaniem biura.

  3. Zamknij okno przeglądarki.

Wdrażanie aktualizacji bazy danych

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

  2. Na pasku narzędzi Publikowanie jednym kliknięciem w sieci Web 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, w celu weryfikacji, czy aktualizacja została pomyślnie zastosowana.

    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 zobaczysz oczekiwaną kolumnę Data urodzenia z datami w niej.

  4. Na pasku narzędzi Web One Click Publish kliknij profil publikowania Staging, a następnie kliknij Publikuj w sieci Web.

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

  6. Na pasku narzędzi Web One Click Publish, kliknij profil publikacji Production i kliknij 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 obejmuje zmianę bazy danych, zazwyczaj należy przełączyć aplikację w tryb offline podczas wdrażania, używając app_offline.htm, tak jak widziałeś w poprzednim samouczku.

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

W tej sekcji dodasz kolumnę Komentarze do tabeli User 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 do środowisk testowego, przejściowego i produkcyjnego.

Dodawanie kolumny do tabeli w bazie danych członkostwa

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

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

    Jeśli nie widzisz (localdb)\v11.0 w węźle programu SQL Server , kliknij prawym przyciskiem myszy węzeł programu SQL Server i kliknij polecenie Dodaj program 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 jest devpwd), a następnie odśwież okno Eksplorator obiektów programu SQL Server.

  3. Kliknij prawym przyciskiem myszy tabelę Użytkownicy, a następnie kliknij pozycję Projektant widoków.

    Projektant widoków SSOX

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

    Dodawanie kolumny Komentarze

  5. W polu Aktualizacje bazy danych w wersji zapoznawczej 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 jej nazwę UserInfo.aspx. Zaakceptuj domyślny plik Site.Master jako stronę wzorcową.

  3. Skopiuj następujący znacznik 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 jest devpwd) i dodaj kilka komentarzy do użytkownika, aby sprawdzić, czy strona działa poprawnie.

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

  6. Zamknij okno przeglądarki.

Wdrażanie aktualizacji bazy danych

Aby wdrożyć przy użyciu dostawcy dbDacFx, wystarczy wybrać opcję Aktualizuj bazę danych w profilu publikowania. Jednak w przypadku początkowego wdrożenia podczas korzystania z 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 na projekt ContosoUniversity i wybierając 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 na potrzeby początkowego wdrożenia:

    1. Kliknij pozycję Konfiguruj aktualizacje bazy danych.
    2. W oknie dialogowym Konfigurowanie aktualizacji bazy danych wyczyść pola wyboru obok 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 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 przycisk Publikuj.

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

  9. Uruchom stronę UserInfo (dodaj konto/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 domyślnie nie są wdrażane, i nie skonfigurowałeś skryptu wdrażania danych do uruchomienia się, więc nie znajdziesz komentarza, który dodałeś podczas 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 poprawnie.

  10. Postępuj zgodnie z tą samą procedurą, aby wdrożyć w środowisku testowym 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 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 obejmuje zmianę bazy danych, zazwyczaj należy przełączyć aplikację w tryb offline podczas wdrażania, przesyłając app_offline.htm przed opublikowaniem, a następnie usuwając ją, jak pokazano w poprzednim samouczku.

Podsumowanie

Właśnie wdrożyłeś aktualizację aplikacji, która zawierała zmianę bazy danych przy użyciu zarówno migracji Code First, jak i dostawcy dbDacFx.

Zrzut ekranu przedstawiający stronę Instruktorzy z wyświetlonymi nazwiskami, datami zatrudnienia, datami urodzenia i przydziałem do biura.

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

W następnym samouczku przedstawiono sposób wykonywania wdrożeń przy użyciu wiersza polecenia.