Condividi tramite


ASP.NET distribuzione Web con Visual Studio: Distribuzione di un aggiornamento del database

di Tom Dykstra

Scaricare il progetto iniziale

Questa serie di esercitazioni illustra come distribuire (pubblicare) un'applicazione Web ASP.NET in app Azure Service App Web o in un provider di hosting di terze parti usando Visual Studio 2012 o Visual Studio 2010. Per informazioni sulla serie, vedere la prima esercitazione della serie.

Panoramica

In questa esercitazione si apportano modifiche al database e si apportano modifiche al codice correlate, si testano le modifiche in Visual Studio, quindi si distribuisce l'aggiornamento negli ambienti di test, staging e produzione.

L'esercitazione illustra innanzitutto come aggiornare un database gestito da Migrazioni Code First e quindi illustra come aggiornare un database usando il provider dbDacFx.

Promemoria: se viene visualizzato un messaggio di errore o qualcosa non funziona durante l'esercitazione, assicurarsi di controllare la pagina di risoluzione dei problemi.

Distribuire un aggiornamento del database usando Migrazioni Code First

In questa sezione si aggiunge una colonna data di nascita alla Person classe base per le Student entità e Instructor . Aggiornare quindi la pagina in cui vengono visualizzati i dati dell'insegnante in modo che visualizzi la nuova colonna. Infine, si distribuiscono le modifiche per testare, gestire la gestione temporanea e la produzione.

Aggiungere una colonna a una tabella nel database dell'applicazione

  1. Nel progetto ContosoUniversity.DAL aprire Person.cs e aggiungere la proprietà seguente alla fine della Person classe (dovrebbero essere presenti due parentesi graffe di chiusura seguenti):

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

    Aggiornare quindi il Seed metodo in modo che fornisca un valore per la nuova colonna. Aprire Migrations\Configuration.cs e sostituire il blocco di codice che inizia var instructors = new List<Instructor> con il blocco di codice seguente che include informazioni sulla data di nascita:

    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. Compilare la soluzione e quindi aprire la finestra della console di Gestione pacchetti. Assicurarsi che ContosoUniversity.DAL sia ancora selezionato come progetto predefinito.

  3. Nella finestra della console di Gestione pacchetti selezionare ContosoUniversity.DAL come progetto predefinito e quindi immettere il comando seguente:

    add-migration AddBirthDate
    

    Al termine di questo comando, Visual Studio apre il file di classe che definisce la nuova DbMigration classe e nel Up metodo è possibile visualizzare il codice che crea la nuova colonna. Il Up metodo crea la colonna quando si implementa la modifica e il Down metodo elimina la colonna quando si esegue il rollback della modifica.

    AddBirthDate_migration_code

  4. Compilare la soluzione e quindi immettere il comando seguente nella finestra della console di Gestione pacchetti (assicurarsi che il progetto ContosoUniversity.DAL sia ancora selezionato):

    update-database
    

    Entity Framework esegue il Up metodo e quindi esegue il Seed metodo .

Visualizzare la nuova colonna nella pagina Instructors

  1. Nel progetto ContosoUniversity aprire Instructors.aspx e aggiungere un nuovo campo modello per visualizzare la data di nascita. Aggiungerlo tra quelli per la data di assunzione e l'assegnazione dell'ufficio:

    <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>
    

    Se il rientro del codice non viene sincronizzato, è possibile premere CTRL+K e quindi CTRL-D per riformattare automaticamente il file.

  2. Eseguire l'applicazione e fare clic sul collegamento Instructors .Run the application and click the Instructors link.

    Quando la pagina viene caricata, si noterà che contiene il nuovo campo data di nascita.

    Screenshot della pagina Instructors che mostra il nome, la data di assunzione, la data di nascita e l'assegnazione dell'ufficio.

  3. Chiudere il browser.

Distribuire l'aggiornamento del database

  1. In Esplora soluzioni selezionare il progetto ContosoUniversity.

  2. Nella barra degli strumenti Web Con un clic su Pubblica fare clic sul profilo di pubblicazione test e quindi su Pubblica web. Se la barra degli strumenti è disabilitata, selezionare il progetto ContosoUniversity in Esplora soluzioni.)

    Visual Studio distribuisce l'applicazione aggiornata e il browser si apre nella home page.

  3. Eseguire la pagina Instructors per verificare che l'aggiornamento sia stato distribuito correttamente.

    Quando l'applicazione tenta di accedere al database per questa pagina, Code First aggiorna lo schema del database ed esegue il Seed metodo . Quando viene visualizzata la pagina, viene visualizzata la colonna Data di nascita prevista con le date.

  4. Nella barra degli strumenti Pubblica con un clic sul Web fare clic sul profilo di pubblicazione staging e quindi su Pubblica web.

  5. Eseguire la pagina Instructors in staging per verificare che l'aggiornamento sia stato distribuito correttamente.

  6. Nella barra degli strumenti Web Con un clic su Pubblica fare clic sul profilo di pubblicazione produzione e quindi su Pubblica web.

  7. Eseguire la pagina Instructors nell'ambiente di produzione per verificare che l'aggiornamento sia stato distribuito correttamente.

    Per un aggiornamento effettivo dell'applicazione di produzione che include una modifica del database, in genere l'applicazione viene eseguita offline durante la distribuzione usando app_offline.htm, come illustrato nell'esercitazione precedente.

Distribuire un aggiornamento del database usando il provider dbDacFx

In questa sezione viene aggiunta una colonna Comments alla tabella User nel database di appartenenza e viene creata una pagina che consente di visualizzare e modificare i commenti per ogni utente. Quindi si distribuiscono le modifiche per testare, staging e produzione.

Aggiungere una colonna a una tabella nel database di appartenenza

  1. In Visual Studio aprire SQL Server Esplora oggetti.

  2. Espandere (localdb)\v11.0, espandere Database, espandere aspnet-ContosoUniversity (non aspnet-ContosoUniversity-Prod) e quindi espandere Tabelle.

    Se non viene visualizzato (localdb)\v11.0 nel nodo SQL Server, fare clic con il pulsante destro del mouse sul nodo SQL Server e scegliere Aggiungi SQL Server. Nella finestra di dialogo Connetti al server immettere (localdb)\v11.0 come nome del server e quindi fare clic su Connetti.

    Se aspnet-ContosoUniversity non viene visualizzato, eseguire il progetto ed eseguire l'accesso usando le credenziali di amministratore (la password è devpwd) e quindi aggiornare la finestra di Esplora oggetti di SQL Server.

  3. Fare clic con il pulsante destro del mouse sulla tabella Utenti e quindi scegliere Progettazione viste.

    Progettazione viste SSOX

  4. Nella finestra di progettazione aggiungere una colonna Comments e renderla nvarchar(128) e nullable, quindi fare clic su Aggiorna.

    Aggiunta della colonna Commenti

  5. Nella casella Anteprima aggiornamenti database fare clic su Aggiorna database.

    Anteprima degli aggiornamenti del database

Creare una pagina per visualizzare e modificare la nuova colonna

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse sulla cartella Account nel progetto ContosoUniversity, scegliere Aggiungi e quindi fare clic su Nuovo elemento.

  2. Creare un nuovo Modulo Web usando la pagina master e denominarlo UserInfo.aspx. Accettare il file Site.Master predefinito come pagina master.

  3. Copiare il markup seguente nell'elemento MainContent Content (ultimo dei 3 Content elementi):

    <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. Fare clic con il pulsante destro del mouse sulla pagina UserInfo.aspx e scegliere Visualizza nel browser.

  5. Accedere con le credenziali dell'utente amministratore (la password è devpwd) e aggiungere alcuni commenti a un utente per verificare che la pagina funzioni correttamente.

    Screenshot che mostra la pagina UserInfo che mostra il test userName e l'account di test di Comment Tom.

  6. Chiudere il browser.

Distribuire l'aggiornamento del database

Per eseguire la distribuzione usando il provider dbDacFx, è sufficiente selezionare l'opzione Aggiorna database nel profilo di pubblicazione. Tuttavia, per la distribuzione iniziale quando è stata usata questa opzione sono stati configurati anche alcuni script SQL aggiuntivi da eseguire: quelli sono ancora presenti nel profilo e sarà necessario impedirne l'esecuzione di nuovo.

  1. Aprire la procedura guidata Pubblica Web facendo clic con il pulsante destro del mouse sul progetto ContosoUniversity e scegliendo Pubblica.

  2. Selezionare il profilo di test .

  3. Fare clic sulla scheda Settings (Impostazioni).

  4. In DefaultConnection selezionare Aggiorna database.

  5. Disabilitare gli script aggiuntivi configurati per l'esecuzione per la distribuzione iniziale:

    1. Fare clic su Configura aggiornamenti del database.
    2. Nella finestra di dialogo Configura aggiornamenti database deselezionare le caselle di controllo accanto a Grant.sql e aspnet-data-dev.sql.
    3. Fare clic su Close.
  6. Fare clic sulla scheda Anteprima .

  7. In Database e a destra di DefaultConnection fare clic sul collegamento Anteprima database .

    Anteprima database

    La finestra di anteprima mostra lo script che verrà eseguito nel database di destinazione per fare in modo che lo schema del database corrisponda allo schema del database di origine. Lo script include un comando ALTER TABLE che aggiunge la nuova colonna.

  8. Chiudere la finestra di dialogo Anteprima database e quindi fare clic su Pubblica.

    Visual Studio distribuisce l'applicazione aggiornata e il browser si apre nella home page.

  9. Eseguire la pagina UserInfo (aggiungere account/UserInfo.aspx all'URL della home page) per verificare che l'aggiornamento sia stato distribuito correttamente. Sarà necessario accedere immettendo admin e devpwd.

    I dati nelle tabelle non vengono distribuiti per impostazione predefinita e non è stato configurato uno script di distribuzione dei dati da eseguire, quindi non sarà possibile trovare il commento aggiunto nello sviluppo. È possibile aggiungere ora un nuovo commento nella gestione temporanea per verificare che la modifica sia stata distribuita nel database e che la pagina funzioni correttamente.

  10. Seguire la stessa procedura per eseguire la distribuzione nella gestione temporanea e nell'ambiente di produzione.

    Non dimenticare di disabilitare gli script aggiuntivi. L'unica differenza rispetto al profilo di test è che si disabiliterà solo uno script nei profili di staging e produzione perché sono stati configurati per l'esecuzione solo aspnet-prod-data.sql.

    Le credenziali per la gestione temporanea e la produzione sono admin e prodpwd.

    Per un aggiornamento effettivo dell'applicazione di produzione che include una modifica del database, l'applicazione viene in genere rimossa durante la distribuzione caricando app_offline.htm prima di pubblicarla ed eliminarla in seguito, come illustrato nell'esercitazione precedente.

Riepilogo

È stato ora distribuito un aggiornamento dell'applicazione che include una modifica del database usando sia Migrazioni Code First che il provider dbDacFx.

Screenshot che mostra la pagina Instructors che mostra il nome, la data di assunzione, la data di nascita e l'assegnazione dell'ufficio.

Screenshot della pagina UserInfo che mostra il test userName e l'account di test di Comment Tom.

L'esercitazione successiva illustra come eseguire le distribuzioni usando la riga di comando.