Wdrażanie aplikacji internetowej ASP.NET z SQL Server Compact przy użyciu programu Visual Studio lub Visual Web Developer: wdrażanie aktualizacji bazy danych — 9 z 12
Autor : Tom Dykstra
W tej serii samouczków pokazano, jak wdrożyć (opublikować) projekt aplikacji internetowej ASP.NET zawierający bazę danych SQL Server Compact przy użyciu programu Visual Studio 2012 RC lub Visual Studio Express 2012 RC for Web. Możesz również użyć programu Visual Studio 2010, jeśli zainstalujesz aktualizację publikowania w sieci Web. Aby zapoznać się z wprowadzeniem do serii, zobacz pierwszy samouczek z serii.
W przypadku samouczka przedstawiającego funkcje wdrażania wprowadzone po wydaniu programu Visual Studio 2012 w wersji RC przedstawiono sposób wdrażania wersji SQL Server innych niż SQL Server Compact oraz pokazano, jak wdrożyć w Azure App Service Web Apps, zobacz ASP.NET Web Deployment using Visual Studio (Wdrażanie w Internecie przy użyciu programu Visual Studio).
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ę zarówno w środowiskach testowych, jak i produkcyjnych.
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.
Dodawanie nowej kolumny do tabeli
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ę.
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, 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, 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") }
};
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="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>
(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).
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 w Up
metodzie zobaczysz kod, który tworzy nową kolumnę.
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
Po zakończeniu działania polecenia uruchom aplikację i wybierz stronę Instruktorzy. Po załadowaniu strony zobaczysz, że ma ono nowe pole daty urodzenia.
Wdrażanie aktualizacji bazy danych w środowisku testowym
W Eksplorator rozwiązań wybierz projekt ContosoUniversity.
Na pasku narzędzi Publikowanie w sieci Web jednym kliknięciem wybierz profil publikowaniatestowego , 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.
Wdrażanie aktualizacji bazy danych w środowisku produkcyjnym
Teraz można wdrożyć je w środowisku produkcyjnym. Jedyna różnica polega na tym, że użyjesz app_offline.htm , aby uniemożliwić użytkownikom uzyskiwanie dostępu do witryny, a tym samym zaktualizować bazę danych podczas wdrażania zmian. W przypadku wdrożenia produkcyjnego wykonaj następujące kroki:
- Przekaż plik app_offline.htm do lokacji produkcyjnej.
- W programie Visual Studio wybierz profil produkcyjny na pasku narzędzi Publikowanie w sieci Web jednym kliknięciem , a następnie kliknij pozycję Publikuj w sieci Web.
- Usuń plik app_offline.htm z lokacji produkcyjnej.
Uwaga
Aplikacja jest używana w środowisku produkcyjnym, ale należy wdrożyć plan tworzenia kopii zapasowych. Oznacza to, że pliki School-Prod.sdf i aspnet-Prod.sdf powinny być okresowo kopiowane z lokacji produkcyjnej do bezpiecznej lokalizacji przechowywania i należy przechowywać kilka pokoleń takich kopii zapasowych. Po zaktualizowaniu bazy danych należy utworzyć kopię zapasową bezpośrednio przed zmianą. Następnie, jeśli popełnisz błąd i nie wykryjesz go dopiero po wdrożeniu go w środowisku produkcyjnym, nadal będzie można odzyskać bazę danych do stanu, w którym znajdowała się przed uszkodzeniem.
Gdy program Visual Studio otworzy adres URL strony głównej w przeglądarce, zostanie wyświetlona strona app_offline.htm . Po usunięciu pliku app_offline.htm możesz ponownie przejść do strony głównej, aby sprawdzić, czy aktualizacja została pomyślnie wdrożona.
Teraz wdrożono aktualizację aplikacji, która obejmowała zmianę bazy danych zarówno w środowisku testowym, jak i produkcyjnym. W następnym samouczku pokazano, jak przeprowadzić migrację bazy danych z SQL Server Compact do SQL Server Express i SQL Server.