ASP.NET nasazení webu pomocí sady Visual Studio: Nasazení aktualizace databáze
Tom Dykstra
V této sérii kurzů se dozvíte, jak nasadit (publikovat) webovou aplikaci ASP.NET do Aplikace Azure Service Web Apps nebo poskytovatele hostingu třetí strany pomocí sady Visual Studio 2012 nebo Visual Studio 2010. Informace o této sérii najdete v prvním kurzu série.
Přehled
V tomto kurzu provedete změnu databáze a související změny kódu, otestujete změny v sadě Visual Studio a pak nasadíte aktualizaci do testovacího, přípravného a produkčního prostředí.
Tento kurz nejprve ukazuje, jak aktualizovat databázi spravovanou Migrace Code First a později ukazuje, jak aktualizovat databázi pomocí zprostředkovatele dbDacFx.
Připomenutí: Pokud se při procházení kurzu zobrazí chybová zpráva nebo něco nefunguje, nezapomeňte se podívat na stránku pro řešení potíží.
Nasazení aktualizace databáze pomocí Migrace Code First
V této části přidáte sloupec data narození do Person
základní třídy pro entity Student
a Instructor
entity. Pak aktualizujete stránku, která zobrazuje data instruktora, aby se zobrazil nový sloupec. Nakonec nasadíte změny do testování, přípravy a produkce.
Přidání sloupce do tabulky v aplikační databázi
V projektu ContosoUniversity.DAL otevřete Person.cs a na konec
Person
třídy přidejte následující vlastnost (za ní by měly být dvě zavírací složené závorky):[DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)] [Display(Name = "Birth Date")] public DateTime? BirthDate { get; set; }
Dále aktualizujte metodu
Seed
tak, aby poskytovala hodnotu pro nový sloupec. Otevřete migraci\Configuration.cs a nahraďte blok kódu, který začínávar instructors = new List<Instructor>
následujícím blokem kódu, který obsahuje informace o datu narození: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") } };
Sestavte řešení a otevřete okno konzoly Správce balíčků. Ujistěte se, že contosoUniversity.DAL je stále vybraný jako výchozí projekt.
V okně konzoly Správce balíčků vyberte jako výchozí projekt ContosoUniversity.DAL a zadejte následující příkaz:
add-migration AddBirthDate
Po dokončení tohoto příkazu visual Studio otevře soubor třídy, který definuje novou
DbMigration
třídu, a vUp
metodě uvidíte kód, který vytvoří nový sloupec. MetodaUp
vytvoří sloupec při implementaci změny aDown
metoda odstraní sloupec při vrácení změny zpět.Sestavte řešení a v okně konzoly Správce balíčků zadejte následující příkaz (ujistěte se, že je vybraný projekt ContosoUniversity.DAL):
update-database
Entity Framework spustí metodu
Up
a pak spustí metoduSeed
.
Zobrazení nového sloupce na stránce Instruktory
V projektu ContosoUniversity otevřete Instructors.aspx a přidejte nové pole šablony pro zobrazení data narození. Přidejte ho mezi data přijetí a přiřazením kanceláře:
<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>
(Pokud se odsazení kódu nesynchronizuje, můžete stisknutím kláves CTRL-K a stisknutím kombinace kláves CTRL-D soubor automaticky přeformátovat.)
Spusťte aplikaci a klikněte na odkaz Instruktory .
Když se stránka načte, uvidíte, že obsahuje nové pole data narození.
Zavřete prohlížeč.
Nasazení aktualizace databáze
V Průzkumník řešení vyberte projekt ContosoUniversity.
Na panelu nástrojů Publikovat po kliknutí na web klepněte na profil publikování testu a potom klepněte na příkaz Publikovat web. (Pokud je panel nástrojů zakázaný, vyberte projekt ContosoUniversity v Průzkumník řešení.)
Visual Studio nasadí aktualizovanou aplikaci a prohlížeč se otevře na domovské stránce.
Spusťte stránku Instruktory a ověřte, že se aktualizace úspěšně nasadila.
Když se aplikace pokusí získat přístup k databázi pro tuto stránku, Code First aktualizuje schéma databáze a spustí metodu
Seed
. Když se zobrazí stránka, zobrazí se očekávaný sloupec Datum narození s kalendářními daty.Na panelu nástrojů Publikovat po kliknutí na web klepněte na pracovní profil publikování a potom klepněte na příkaz Publikovat web.
Spusťte stránku Instruktory v přípravné fázi a ověřte, že se aktualizace úspěšně nasadila.
Na panelu nástrojů Publikovat po kliknutí na web klepněte na profil publikování v produkčním prostředí a potom klepněte na příkaz Publikovat web.
Spusťte stránku Instruktory v produkčním prostředí a ověřte, že se aktualizace úspěšně nasadila.
V případě skutečné produkční aktualizace aplikace, která zahrnuje změnu databáze, byste aplikaci obvykle přepísli do offline režimu během nasazování pomocí app_offline.htm, jak jste viděli v předchozím kurzu.
Nasazení aktualizace databáze pomocí zprostředkovatele dbDacFx
V této části přidáte sloupec Komentáře do tabulky Uživatel v databázi členství a vytvoříte stránku, která umožňuje zobrazovat a upravovat komentáře pro každého uživatele. Pak nasadíte změny do testování, přípravy a produkce.
Přidání sloupce do tabulky v databázi členství
V sadě Visual Studio otevřete SQL Server Průzkumník objektů.
Rozbalte položku (localdb)\v11.0, rozbalte databáze, rozbalte aspnet-ContosoUniversity (ne aspnet-ContosoUniversity-Prod) a potom rozbalte tabulky.
Pokud v uzlu SQL Serveru nevidíte (localdb)\v11.0, klikněte pravým tlačítkem myši na uzel SQL Serveru a klikněte na Přidat SQL Server. V dialogovém okně Připojit k serveru zadejte (localdb)\v11.0 jako název serveru a klepněte na tlačítko Připojit.
Pokud aspnet-ContosoUniversity nevidíte, spusťte projekt a přihlaste se pomocí přihlašovacích údajů správce (heslo je devpwd) a pak aktualizujte okno Průzkumník objektů SQL Serveru.
Klepněte pravým tlačítkem myši na tabulku Uživatelé a klepněte na příkaz Návrhář zobrazení.
V návrháři přidejte sloupec Komentáře a nastavte ho jako nvarchar(128) a hodnotu nullable a klepněte na tlačítko Aktualizovat.
V okně Aktualizace databáze ve verzi Preview klepněte na tlačítko Aktualizovat databázi.
Vytvoření stránky pro zobrazení a úpravu nového sloupce
V Průzkumník řešení klepněte pravým tlačítkem myši na složku Účet v projektu ContosoUniversity, klepněte na tlačítko Přidat a potom klepněte na tlačítko Nová položka.
Vytvořte nový webový formulář pomocí stránky předlohy a pojmenujte ho UserInfo.aspx. Přijměte výchozí soubor Site.Master jako stránku předlohy.
Zkopírujte následující kód do elementu
MainContent
Content
(poslední ze 3Content
prvků):<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>
Klikněte pravým tlačítkem na stránku UserInfo.aspx a klikněte na Zobrazit v prohlížeči.
Přihlaste se pomocí přihlašovacích údajů správce (heslo je devpwd) a přidejte uživateli nějaké komentáře, abyste ověřili, že stránka funguje správně.
Zavřete prohlížeč.
Nasazení aktualizace databáze
Pokud chcete provést nasazení pomocí zprostředkovatele dbDacFx, stačí vybrat možnost Aktualizovat databázi v profilu publikování. Při počátečním nasazení při použití této možnosti jste také nakonfigurovali několik dalších skriptů SQL ke spuštění: ty jsou stále v profilu a budete muset zabránit jejich opětovnému spuštění.
Otevřete průvodce publikováním webu tak, že kliknete pravým tlačítkem na projekt ContosoUniversity a kliknete na Publikovat.
Vyberte testovací profil.
Klikněte na kartu Settings (Nastavení).
V části DefaultConnection vyberte Aktualizovat databázi.
Zakažte další skripty, které jste nakonfigurovali pro spuštění pro počáteční nasazení:
- Klikněte na Konfigurovat aktualizace databáze.
- V dialogovém okně Konfigurovat aktualizace databáze zrušte zaškrtnutí políček vedle Grant.sql a aspnet-data-dev.sql.
- Klepněte na tlačítko Zavřít.
Klikněte na kartu Náhled .
V části Databáze a vpravo od defaultConnection klikněte na odkaz databáze ve verzi Preview.
V okně náhledu se zobrazí skript, který se spustí v cílové databázi, aby schéma databáze odpovídalo schématu zdrojové databáze. Skript obsahuje příkaz ALTER TABLE, který přidá nový sloupec.
Zavřete dialogové okno Náhled databáze a klepněte na tlačítko Publikovat.
Visual Studio nasadí aktualizovanou aplikaci a prohlížeč se otevře na domovské stránce.
Spusťte stránku UserInfo (přidejte účet nebo UserInfo.aspx na adresu URL domovské stránky) a ověřte, zda byla aktualizace úspěšně nasazena. Budete se muset přihlásit zadáním správce a devpwd.
Data v tabulkách se ve výchozím nastavení nenasazují a nenakonfigurovali jste skript pro nasazení dat, který se má spustit, takže nenajdete komentář, který jste přidali ve vývoji. Teď můžete přidat nový komentář v přípravné fázi, abyste ověřili, že se změna nasadila do databáze a stránka funguje správně.
Stejným postupem proveďte nasazení do přípravného a produkčního prostředí.
Nezapomeňte zakázat nadbytečné skripty. Jediným rozdílem v porovnání s testovacím profilem je, že v pracovních a produkčních profilech zakážete pouze jeden skript, protože byly nakonfigurovány tak, aby běžely pouze aspnet-prod-data.sql.
Přihlašovací údaje pro přípravné a produkční prostředí jsou admin a prodpwd.
V případě skutečné produkční aktualizace aplikace, která zahrnuje změnu databáze, byste také obvykle aplikaci během nasazování převeďte do offline režimu tak, že před publikováním nahrajete app_offline.htm a potom ji odstraníte, jak jste viděli v předchozím kurzu.
Shrnutí
Teď jste nasadili aktualizaci aplikace, která zahrnovala změnu databáze pomocí Migrace Code First i zprostředkovatele dbDacFx.
V dalším kurzu se dozvíte, jak spouštět nasazení pomocí příkazového řádku.