ASP.NET wdrażanie w Internecie przy użyciu programu Visual Studio: wdrażanie aktualizacji bazy danych
Autor : Tom Dykstra
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
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") } };
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.
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 wUp
metodzie zobaczysz kod, który tworzy nową kolumnę. MetodaUp
tworzy kolumnę podczas implementowania zmiany, aDown
metoda usuwa kolumnę podczas wycofywania zmiany.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
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).
Uruchom aplikację i kliknij link Instruktorzy .
Po załadowaniu strony zobaczysz, że ma ono nowe pole daty urodzenia.
Zamknij okno przeglądarki.
Wdrażanie aktualizacji bazy danych
W Eksplorator rozwiązań wybierz projekt ContosoUniversity.
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.
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.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.
Uruchom stronę Instruktorzy w środowisku przejściowym, aby sprawdzić, czy aktualizacja została pomyślnie wdrożona.
Na pasku narzędzi Publikowanie w sieci Web jednym kliknięciem kliknij profil Publikowania produkcyjnego , a następnie kliknij pozycję Publikuj w sieci Web.
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
W programie Visual Studio otwórz SQL Server Eksplorator obiektów.
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.
Kliknij prawym przyciskiem myszy tabelę Użytkownicy, a następnie kliknij polecenie Wyświetl Projektant.
W projektancie dodaj kolumnę Komentarze i ustaw ją jako nvarchar(128) i dopuszczaną wartość null, a następnie kliknij przycisk Aktualizuj.
W polu Baza danych w wersji zapoznawczej Aktualizacje kliknij pozycję Aktualizuj bazę danych.
Tworzenie strony do wyświetlania i edytowania nowej kolumny
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy folder Account w projekcie ContosoUniversity, kliknij pozycję Dodaj, a następnie kliknij pozycję Nowy element.
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ą.
Skopiuj następujące znaczniki do
MainContent
Content
elementu (ostatnie z 3Content
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>
Kliknij prawym przyciskiem myszy stronę UserInfo.aspx i kliknij polecenie Wyświetl w przeglądarce.
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.
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.
Otwórz Kreatora publikowania w sieci Web , klikając prawym przyciskiem myszy projekt ContosoUniversity i klikając pozycję Publikuj.
Wybierz profil testowy .
Kliknij kartę Ustawienia.
W obszarze DomyślnePołączenie wybierz pozycję Aktualizuj bazę danych.
Wyłącz dodatkowe skrypty skonfigurowane do uruchamiania dla początkowego wdrożenia:
- Kliknij pozycję Konfiguruj aktualizacje bazy danych.
- W oknie dialogowym Konfigurowanie Aktualizacje bazy danych wyczyść pola wyboru obok pól Grant.sql i aspnet-data-dev.sql.
- Kliknij przycisk Zamknij.
Kliknij kartę Podgląd .
W obszarze Bazy danych i po prawej stronie pozycji DefaultConnection kliknij link 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ę.
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.
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.
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.
W następnym samouczku pokazano, jak wykonywać wdrożenia przy użyciu wiersza polecenia.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla