Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
di Tom Dykstra
Scaricare il progetto iniziale
Questa serie di esercitazioni illustra come distribuire (pubblicare) un progetto di applicazione Web ASP.NET che include un database sql Server Compact usando Visual Studio 2012 RC o Visual Studio Express 2012 RC per Web. È anche possibile usare Visual Studio 2010 se si installa l'aggiornamento di pubblicazione Web. Per un'introduzione alla serie, vedere la prima esercitazione della serie.
Per un'esercitazione che illustra le funzionalità di distribuzione introdotte dopo la versione RC di Visual Studio 2012, illustra come distribuire edizioni di SQL Server diverse da SQL Server Compact e illustra come eseguire la distribuzione in siti Web di Windows Azure, vedere ASP.NET distribuzione Web con Visual Studio.
Informazioni generali
Questa esercitazione illustra come distribuire un aggiornamento del database in un database SQL Server completo. Poiché le migrazioni Code First elaborano tutto il lavoro di aggiornamento del database, il processo è quasi identico a quello eseguito per SQL Server Compact nell'esercitazione Distribuzione di un aggiornamento del database.
Promemoria: se viene visualizzato un messaggio di errore o qualcosa non funziona durante l'esercitazione, assicurarsi di controllare la pagina di risoluzione dei problemi.
Aggiunta di una nuova colonna a una tabella
In questa sezione dell'esercitazione verrà apportata una modifica al database e le modifiche del codice corrispondenti, quindi testarle in Visual Studio per prepararle alla distribuzione negli ambienti di test e produzione. La modifica comporta l'aggiunta di una OfficeHours colonna all'entità Instructor e la visualizzazione delle nuove informazioni nella pagina Web Instructors .
Nel progetto ContosoUniversity.DAL aprire Instructor.cs e aggiungere la proprietà seguente tra le HireDate proprietà e Courses :
[MaxLength(50)]
public string OfficeHours { get; set; }
Aggiornare la classe dell'inizializzatore in modo che popoli la nuova colonna con i dati di test. 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 la nuova colonna:
var instructors = new List<Instructor>
{
new Instructor { FirstMidName = "Kim", LastName = "Abercrombie", HireDate = DateTime.Parse("1995-03-11"), BirthDate = DateTime.Parse("1918-08-12"), OfficeHours = "8-9AM, 4-5PM", 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"), OfficeHours = "6AM-6PM", 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"), OfficeHours = "By appointment only" }
};
Nel progetto ContosoUniversity, apri Instructors.aspx e aggiungi un nuovo campo modello per gli orari di ufficio subito prima del tag di chiusura </Columns> nel controllo del primo GridView:
<asp:TemplateField HeaderText="Office Hours">
<ItemTemplate>
<asp:Label ID="InstructorOfficeHoursLabel" runat="server" Text='<%# Eval("OfficeHours") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="InstructorOfficeHoursTextBox" runat="server" Text='<%# Bind("OfficeHours") %>'
Width="14em"></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
Costruire la soluzione.
Aprire la finestra Console di Gestione pacchetti e selezionare ContosoUniversity.DAL come progetto predefinito.
Immettere i comandi seguenti:
add-migration AddOfficeHoursColumn
update-database
Eseguire l'applicazione e selezionare la pagina Istruttori. Il caricamento della pagina richiede poco più tempo del solito, perché Entity Framework crea nuovamente il database e ne esegue il seeding con i dati di test.
Distribuzione dell'aggiornamento del database nell'ambiente di test
Quando si usano migrazioni Code First, il metodo per la distribuzione di una modifica del database in SQL Server è uguale a quello di SQL Server Compact. Tuttavia, è necessario modificare il profilo di pubblicazione test perché è ancora configurato per la migrazione da SQL Server Compact a SQL Server.
Il primo passaggio consiste nel rimuovere le trasformazioni della stringa di connessione create nell'esercitazione precedente. Queste impostazioni non sono più necessarie perché si specificano trasformazioni delle stringhe di connessione nel profilo di pubblicazione, come è stato fatto prima di configurare la scheda Pacchetto/Pubblicazione SQL per la migrazione a SQL Server.
Aprire il file Web.Test.config e rimuovere l'elemento connectionStrings . L'unica trasformazione rimanente nel file Web.Test.config è relativa al Environment valore nell'elemento appSettings .
È ora possibile aggiornare il profilo di pubblicazione e pubblicare nell'ambiente di test.
Aprire la procedura guidata Pubblica web e quindi passare alla scheda Profilo .
Selezionare il profilo di pubblicazione Test.
Seleziona la scheda Impostazioni.
Fare clic su Abilita i nuovi miglioramenti alla pubblicazione del database.
Nella casella stringa di connessione per SchoolContext immettere lo stesso valore usato nel file di trasformazione Web.Test.config nell'esercitazione precedente:
Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True
Selezionare Esegui migrazioni Code First (esecuzioni all'avvio dell'applicazione). Nella versione di Visual Studio la casella di controllo potrebbe essere etichettata Applica migrazioni Code First.
Nella casella stringa di connessione per DefaultConnection immettere lo stesso valore usato nel file di trasformazione Web.Test.config nell'esercitazione precedente:
Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True
Lascia deselezionato Aggiorna database.
Fare clic su Pubblica.
Visual Studio distribuisce le modifiche al codice nell'ambiente di test e apre il browser alla home page di Contoso University.
Selezionare la pagina Instructors (Insegnanti).
Quando l'applicazione esegue questa pagina, tenta di accedere al database. Le migrazioni Code First controllano se il database è corrente e rileva che la migrazione più recente non è ancora stata applicata. Le migrazioni Code First applicano l'ultima migrazione, eseguono il metodo Seed, e quindi la pagina viene eseguita normalmente. Viene visualizzata la nuova colonna Office Hours con i dati inizializzati.
Distribuzione dell'aggiornamento del database nell'ambiente di produzione
È anche necessario modificare il profilo di pubblicazione per l'ambiente di produzione. In questo caso si rimuoverà il profilo esistente e ne verrà creato uno nuovo importando un file con estensione publishsettings aggiornato. Il file aggiornato includerà la stringa di connessione per il database di SQL Server in Cytanium.
Come si è visto quando è stato distribuito nell'ambiente di test, non sono più necessarie trasformazioni delle stringhe di connessione nel file di trasformazione Web.Production.config . Aprire il file e rimuovere l'elemento connectionStrings . Le trasformazioni rimanenti riguardano il valore di Environment nell'elemento appSettings e l'elemento location che limita l'accesso ai report di errori Elmah.
Prima di creare un nuovo profilo di pubblicazione per la produzione, scarica un file con l'estensione .publishsettings aggiornato nello stesso modo in cui hai fatto in precedenza nell'esercitazione Distribuzione nell'ambiente di produzione. Nel pannello di controllo Cytanium fare clic su Siti Web e quindi sul sito Web contosouniversity.com . Selezionare la scheda Pubblicazione Web e quindi fare clic su Scarica profilo di pubblicazione per questo sito Web. Il motivo per cui si sta eseguendo questa operazione consiste nel selezionare la stringa di connessione del database nel file con estensione publishsettings. La stringa di connessione non era disponibile la prima volta che è stato scaricato il file, perché era ancora in uso SQL Server Compact e non è stato ancora creato il database di SQL Server in Cytanium.
È ora possibile aggiornare il profilo di pubblicazione e pubblicarlo nell'ambiente di produzione.
Aprire la procedura guidata Pubblica web e quindi passare alla scheda Profilo .
Fare clic su Gestisci profili e quindi eliminare il profilo di produzione.
Chiudere la procedura guidata Pubblica web per salvare questa modifica.
Aprire di nuovo la procedura guidata Pubblica web e quindi fare clic su Importa.
Nella scheda Connessione impostare URL di destinazione sul valore appropriato se si usa un URL temporaneo.
Fare clic su Avanti.
Nella scheda Impostazioni fare clic su Abilita i miglioramenti alla pubblicazione del nuovo database.
Nell'elenco a discesa delle stringhe di connessione per SchoolContext, selezionare la stringa di connessione Cytanium.
Selezionare Esegui migrazioni Code First (esecuzioni all'avvio dell'applicazione).
Nell'elenco a discesa delle stringhe di connessione per DefaultConnection, selezionare la stringa di connessione la Cytanium.
Selezionare la scheda Profilo , fare clic su Gestisci profili e rinominare il profilo da "contosouniversity.com - Distribuzione Web" in "Produzione".
Chiudere il profilo di pubblicazione per salvare la modifica, quindi aprirla di nuovo.
Fare clic su Pubblica. Per un sito Web di produzione reale, copiare app_offline.htm nell'ambiente di produzione e inserirlo nella cartella del progetto prima della pubblicazione, quindi rimuoverlo al termine della distribuzione.
Visual Studio distribuisce le modifiche al codice nell'ambiente di test e apre il browser alla home page di Contoso University.
Selezionare la pagina Instructors (Insegnanti).
Le migrazioni Code First aggiornano il database nello stesso modo in cui è stato eseguito nell'ambiente di test. Viene visualizzata la nuova colonna Office Hours con i dati inizializzati.
È stato ora distribuito un aggiornamento dell'applicazione che includeva una modifica del database usando un database di SQL Server.
Altre informazioni
Questa serie di esercitazioni completa la distribuzione di un'applicazione Web ASP.NET a un provider di hosting di terze parti. Per altre informazioni su uno degli argomenti trattati in queste esercitazioni, vedere la ASP.NET Deployment Content Map (Mappa contenuto distribuzione) nel sito Web MSDN.
Ringraziamenti
Vorrei ringraziare le persone seguenti che hanno contribuito in modo significativo al contenuto di questa serie di esercitazioni:
- Alberto Poblacion, MVP & MCT, Spagna
- Jarod Ferguson, MVP per lo sviluppo della piattaforma dati, Stati Uniti
- Harsh Mittal, Microsoft
- Kristina Olson, Microsoft
- Mike Pope, Microsoft
- Mohit Srivastava, Microsoft
- Carlo Rialdi, Italia
- Rick Anderson, Microsoft
- Sayed Hashimi, Microsoft(twitter: @sayedihashimi)
- Scott Hanselman (twitter: @shanselman)
- Scott Hunter, Microsoft (twitter: @coolcsh)
- Srđan Božović, Serbia
- Vishal Joshi, Microsoft (twitter: @vishalrjoshi)