Udostępnij za pośrednictwem


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 aplikacja systemu Azure 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 pokazano najpierw, 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ę wyświetlającą 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 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 mają zostać dodane do 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 kończy się synchronizacją, możesz nacisnąć CTRL-K, a następnie nacisnąć 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 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, 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 jednym kliknięciem w sieci Web 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 jednym kliknięciem w sieci Web 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, zazwyczaj należy przejąć 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 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 w celu testowania, przemieszczania i produkcji.

Dodawanie kolumny do tabeli w bazie danych członkostwa

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

  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 (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ę Users (Użytkownicy), a następnie kliknij pozycję View Designer (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 MainContent Content 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 projekt ContosoUniversity i klikając polecenie 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 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 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 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 poprawnie.

  10. Postępuj zgodnie z tą samą procedurą, aby wdrożyć wdrożenie 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 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, zazwyczaj należy przejąć 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 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 przedstawiono sposób wykonywania wdrożeń przy użyciu wiersza polecenia.