Condividi tramite


Distribuzione di un'applicazione Web ASP.NET con SQL Server Compact con Visual Studio o Visual Web Developer: Migrazione a SQL Server - 10 di 12

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 nelle app Web del servizio app di Azure, vedere ASP.NET distribuzione Web con Visual Studio.

Informazioni generali

Questa esercitazione illustra come eseguire la migrazione da SQL Server Compact a SQL Server. Un motivo per cui si vuole eseguire questa operazione consiste nell'sfruttare le funzionalità di SQL Server non supportate da SQL Server Compact, ad esempio stored procedure, trigger, viste o replica. Per altre informazioni sulle differenze tra SQL Server Compact e SQL Server, vedere l'esercitazione sulla distribuzione di SQL Server Compact .

SQL Server Express e SQL Server completo per lo sviluppo

Dopo aver deciso di eseguire l'aggiornamento a SQL Server, è possibile usare SQL Server o SQL Server Express negli ambienti di sviluppo e test. Oltre alle differenze nel supporto degli strumenti e nelle funzionalità del motore di database, esistono differenze nelle implementazioni del provider tra SQL Server Compact e altre versioni di SQL Server. Queste differenze possono causare la generazione dello stesso codice di risultati diversi. Pertanto, se si decide di mantenere SQL Server Compact come database di sviluppo, è necessario testare accuratamente il sito in SQL Server o SQL Server Express in un ambiente di test prima di ogni distribuzione nell'ambiente di produzione.

A differenza di SQL Server Compact, SQL Server Express è essenzialmente lo stesso motore di database e usa lo stesso provider .NET completo di SQL Server. Quando si esegue il test con SQL Server Express, è possibile ottenere gli stessi risultati ottenuti con SQL Server. È possibile usare la maggior parte degli stessi strumenti di database con SQL Server Express che è possibile usare con SQL Server (un'eccezione notevole essendo SQL Server Profiler) e supporta altre funzionalità di SQL Server, ad esempio stored procedure, viste, trigger e replica. In genere è necessario usare SQL Server completo in un sito Web di produzione. SQL Server Express può essere eseguito in un ambiente di hosting condiviso, ma non è stato progettato per questo e molti provider di hosting non lo supportano.

Se si usa Visual Studio 2012, in genere si sceglie SQL Server Express LocalDB per l'ambiente di sviluppo perché ciò è installato per impostazione predefinita con Visual Studio. Tuttavia, LocalDB non funziona in IIS, quindi per l'ambiente di test è necessario usare SQL Server o SQL Server Express.

Combinazione di database contro mantenimento separato

L'applicazione Contoso University ha due database SQL Server Compact: il database di appartenenza (aspnet.sdf) e il database dell'applicazione (School.sdf). Quando si esegue la migrazione, è possibile eseguire la migrazione di questi database a due database separati o a un singolo database. È possibile combinarli per facilitare i join di database tra il database dell'applicazione e il database di appartenenza. Il piano di hosting potrebbe anche fornire un motivo per combinarli. Ad esempio, il provider di hosting potrebbe addebitare più costi per più database o non consentire nemmeno più di un database. Questo è il caso dell'account di hosting Cytanium Lite usato per questa esercitazione, che consente solo un singolo database di SQL Server.

In questa esercitazione si eseguirà la migrazione dei due database in questo modo:

  • Eseguire la migrazione a due database LocalDB nell'ambiente di sviluppo.
  • Eseguire la migrazione a due database di SQL Server Express nell'ambiente di test.
  • Eseguire la migrazione a un database SQL Server completo combinato nell'ambiente di produzione.

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

Installazione di SQL Server Express

SQL Server Express viene installato automaticamente per impostazione predefinita con Visual Studio 2010, ma per impostazione predefinita non è installato con Visual Studio 2012. Per installare SQL Server 2012 Express, fare clic sul collegamento seguente

Scegliere ENU/x64/SQLEXPR_x64_ENU.exe o ENU/x86/SQLEXPR_x86_ENU.exee nell'installazione guidata accettare le impostazioni predefinite. Per altre informazioni sulle opzioni di installazione, vedere Installare SQL Server 2012 dall'Installazione guidata (programma di installazione).

Creazione di database SQL Server Express per l'ambiente di test

Il passaggio successivo consiste nel creare i database ASP.NET per i membri e per la Scuola.

Dal menu Visualizza selezionare Esplora server (Esplora database in Visual Web Developer) e quindi fare clic con il pulsante destro del mouse su Connessioni dati e scegliere Crea nuovo database di SQL Server.

Selezionare_Crea_Nuovo_Database_SQL_Server

Nella finestra di dialogo Crea nuovo database di SQL Server immettere ".\SQLExpress" nella casella Nome server e "aspnet-Test" nella casella Nuovo nome database , quindi fare clic su OK.

Create_New_SQL_Server_Database_aspnet

Seguire la stessa procedura per creare un nuovo database di SQL Server Express School denominato "School-Test".

Si aggiunge "Test" a questi nomi di database perché in un secondo momento si creerà un'istanza aggiuntiva di ogni database per l'ambiente di sviluppo ed è necessario essere in grado di distinguere i due set di database.

Esplora server mostra ora i due nuovi database.

New_databases_in_Server_Explorer

Creazione di uno script di concessione per i nuovi database

Quando l'applicazione viene eseguita in IIS nel computer di sviluppo, l'applicazione accede al database usando le credenziali del pool di applicazioni predefinito. Tuttavia, per impostazione predefinita, l'identità del pool di applicazioni non dispone dell'autorizzazione per aprire i database. È quindi necessario eseguire uno script per concedere tale autorizzazione. In questa sezione viene creato lo script che verrà eseguito in un secondo momento per assicurarsi che l'applicazione possa aprire i database durante l'esecuzione in IIS.

Nella cartella SolutionFiles della soluzione creata nell'esercitazione Distribuzione nell'ambiente di produzione creare un nuovo file SQL denominato Grant.sql. Copiare i comandi SQL seguenti nel file e quindi salvare e chiudere il file:

IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool')
BEGIN
    CREATE LOGIN [IIS APPPOOL\DefaultAppPool] 
      FROM WINDOWS WITH DEFAULT_DATABASE=[master], 
      DEFAULT_LANGUAGE=[us_english]
END
GO
CREATE USER [ContosoUniversityUser] 
  FOR LOGIN [IIS APPPOOL\DefaultAppPool]
GO
EXEC sp_addrolemember 'db_owner', 'ContosoUniversityUser'
GO

Annotazioni

Questo script è progettato per l'uso con SQL Server 2008 e con le impostazioni IIS in Windows 7, come specificato in questa esercitazione. Se si usa una versione diversa di SQL Server o di Windows o se si configura IIS nel computer in modo diverso, potrebbero essere necessarie modifiche a questo script. Per altre informazioni sugli script di SQL Server, vedere la documentazione online di SQL Server.

Annotazioni

Nota sulla sicurezza Questo script concede db_owner autorizzazioni all'utente che accede al database in fase di esecuzione, ovvero ciò che si avrà nell'ambiente di produzione. In alcuni scenari può essere necessario specificare un utente con autorizzazioni di aggiornamento completo dello schema del database solo per la distribuzione e specificare per il runtime un utente diverso che dispone delle autorizzazioni solo per la lettura e la scrittura dei dati. Per altre informazioni, vedere Revisione delle modifiche Web.config automatiche per le migrazioni Code First in Distribuzione in IIS come ambiente di test.

Configurazione della distribuzione del database per l'ambiente di test

Successivamente, si configurerà Visual Studio in modo da eseguire le attività seguenti per ogni database:

  • Generare uno script SQL che crea la struttura del database di origine (tabelle, colonne, vincoli e così via) nel database di destinazione.
  • Generare uno script SQL che inserisce i dati del database di origine nelle tabelle nel database di destinazione.
  • Eseguire gli script generati e lo script Grant creato nel database di destinazione.

Aprire la finestra Proprietà progetto e selezionare la scheda Pacchetto/Pubblica SQL .

Assicurarsi che Active (Release) o Release sia selezionata nell'elenco a discesa Configurazione.

Fare clic su Abilita questa pagina.

Pacchetto_Pubblica_SQL_tab_Abilita_questa_pagina

La scheda SQL pacchetto/pubblicazione è in genere disabilitata perché specifica un metodo di distribuzione legacy. Per la maggior parte degli scenari, è consigliabile configurare la distribuzione del database nella procedura guidata Pubblica web . La migrazione da SQL Server Compact a SQL Server o SQL Server Express è un caso speciale per cui questo metodo è una scelta ottimale.

Fare clic su Importa da Web.config.

Selecting_Import_from_Web.config

Visual Studio cerca le stringhe di connessione nel file Web.config , ne trova una per il database di appartenenza e una per il database School e aggiunge una riga corrispondente a ogni stringa di connessione nella tabella Voci di database . Le stringhe di connessione trovate sono per i database di SQL Server Compact esistenti e il passaggio successivo consiste nel configurare come e dove distribuire questi database.

Immettere le impostazioni di distribuzione del database nella sezione Dettagli voce del database sotto la tabella Voci di database. Le impostazioni visualizzate nella sezione Dettagli voce database riguardano la riga selezionata nella tabella Voci di database , come illustrato nella figura seguente.

Sezione_Dettagli_Voce_Database_del_Tab_SQL_Pubblica_Pacchetto

Configurazione delle impostazioni di distribuzione per il database di appartenenza

Selezionare la riga DefaultConnection-Deployment nella tabella Voci di database per configurare le impostazioni applicabili al database di appartenenza.

In Stringa di connessione per il database di destinazione immettere una stringa di connessione che punta al nuovo database di appartenenza a SQL Server Express. È possibile ottenere la stringa di connessione necessaria da Esplora server. In Esplora server espandere Connessioni dati e selezionare il database aspnetTest , quindi nella finestra Proprietà copiare il valore stringa di connessione .

aspnet_connection_string_in_Server_Explorer

La stessa stringa di connessione viene riprodotta qui:

Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False

Copiare e incollare questa stringa di connessione nella stringa di connessione per il database di destinazione nella scheda Pacchetto/Pubblicazione SQL .

Assicurarsi che sia selezionata l'opzione Pull dei dati e/o dello schema da un database esistente . Questo è ciò che fa sì che gli script SQL vengano generati automaticamente ed eseguiti nel database di destinazione.

La stringa di connessione per il valore del database di origine viene estratta dal file Web.config e punta al database SQL Server Compact di sviluppo. Si tratta del database di origine che verrà usato per generare gli script che verranno eseguiti in un secondo momento nel database di destinazione. Poiché si vuole distribuire la versione di produzione del database, modificare "aspnet-Dev.sdf" in "aspnet-Prod.sdf".

Modificare le opzioni di scripting del database da Solo schema a Schema e dati, poiché si desidera copiare i dati (account utente e ruoli) nonché la struttura del database.

Per configurare la distribuzione per eseguire gli script di concessione creati in precedenza, è necessario aggiungerli alla sezione Script di database . Fare clic su Aggiungi script e nella finestra di dialogo Aggiungi script SQL passare alla cartella in cui è stato archiviato lo script di concessione , ovvero la cartella che contiene il file della soluzione. Selezionare il file denominato Grant.sql e fare clic su Apri.

Select_File_dialog_box_grant_script

Le impostazioni per la riga DefaultConnection-Deployment nelle voci del database sono ora simili alla figura seguente:

Dettagli_di_Database_Entry_per_DefaultConnection_Test

Configurazione delle impostazioni di distribuzione per il database dell'istituto di istruzione

Selezionare quindi la riga SchoolContext-Deployment nella tabella Voci di database per configurare le impostazioni di distribuzione per il database School.

È possibile usare lo stesso metodo usato in precedenza per ottenere la stringa di connessione per il nuovo database SQL Server Express. Copiare questa stringa di connessione nella stringa di connessione per il database di destinazione nella scheda Pacchetto/Pubblicazione SQL .

Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False

Assicurarsi che sia selezionata l'opzione Pull dei dati e/o dello schema da un database esistente .

La stringa di connessione per il valore del database di origine viene estratta dal file Web.config e punta al database SQL Server Compact di sviluppo. Modificare "School-Dev.sdf" in "School-Prod.sdf" per distribuire la versione di produzione del database. Non è mai stato creato un file School-Prod.sdf nella cartella App_Data, quindi il file verrà copiato dall'ambiente di test alla cartella App_Data nella cartella del progetto ContosoUniversity in un secondo momento.

Modificare le opzioni di scripting del database in Schema e dati.

Vuoi anche eseguire lo script per concedere le autorizzazioni di lettura e scrittura per questo database all'account del pool di applicazioni, quindi aggiungi il file Grant.sql di script come hai fatto per il database di appartenenza.

Una volta completato, le impostazioni per la riga SchoolContext-Deployment nelle Voci di Database sono simili alla figura seguente.

Database_Entry_Details_for_SchoolContext_Test

Salvare le modifiche apportate alla scheda Pacchetto/Pubblicazione sql .

Copiare il file School-Prod.sdf dalla cartella c:\inetpub\wwwroot\ContosoUniversity\App_Data nella cartella App_Data del progetto ContosoUniversity.

Specifica della modalità transazionale per lo script di concessione

Il processo di distribuzione genera script che distribuiscono lo schema e i dati del database. Per impostazione predefinita, questi script vengono eseguiti in una transazione. Tuttavia, gli script personalizzati (come gli script di concessione) per impostazione predefinita non vengono eseguiti in una transazione. Se il processo di distribuzione combina le modalità di transazione, potrebbe verificarsi un errore di timeout quando gli script vengono eseguiti durante la distribuzione. In questa sezione si modifica il file di progetto per configurare gli script personalizzati da eseguire in una transazione.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ContosoUniversity e scegliere Scarica progetto.

Scarica_Progetto_in_Esplora_Soluzioni

Fare di nuovo clic con il pulsante destro del mouse sul progetto e scegliere Modifica ContosoUniversity.csproj.

Modifica_Progetto_in_Explora_Soluzioni

L'editor di Visual Studio mostra il contenuto XML del file di progetto. Si noti che sono presenti diversi PropertyGroup elementi. Nell'immagine il contenuto degli PropertyGroup elementi è stato omesso.

Finestra dell'editor del file di progetto

Il primo, che non ha alcun Condition attributo, è per le impostazioni che si applicano indipendentemente dalla configurazione di compilazione. Un PropertyGroup elemento si applica solo alla configurazione della build di debug (si noti l'attributo Condition ), uno si applica solo alla configurazione della build release e uno si applica solo alla configurazione di compilazione test. All'interno dell'elemento PropertyGroup per la configurazione della build di rilascio verrà visualizzato un PublishDatabaseSettings elemento che contiene le impostazioni immesse nella scheda Pacchetto/Pubblicazione SQL . È presente un Object elemento che corrisponde a ognuno degli script di concessione specificati (si notino le due istanze di "Grant.sql"). Per impostazione predefinita, l'attributo Transacted dell'elemento Source per ogni script di concessione è False.

Transacted_false

Modificare il valore dell'attributo Transacted dell'elemento Source in True.

Transacted_true

Salvare e chiudere il file di progetto, quindi fare clic con il pulsante destro del mouse sul progetto in Esplora soluzioni e selezionare Ricarica progetto.

Reload_project

Configurazione delle trasformazioni Web.Config per le stringhe di connessione

Le stringhe di connessione per i nuovi database SQL Express immessi nella scheda Package/Publish SQL vengono usate da Distribuzione Web solo per aggiornare il database di destinazione durante la distribuzione. È comunque necessario configurare Web.config trasformazioni in modo che le stringhe di connessione nel file Web.config distribuito puntino ai nuovi database SQL Server Express. Quando si usa la scheda Pacchetto/Pubblicazione SQL , non è possibile configurare le stringhe di connessione nel profilo di pubblicazione.

Aprire Web.Test.config e sostituire l'elemento connectionStrings con l'elemento nell'esempio connectionStrings seguente. Assicurarsi di copiare solo l'elemento connectionStrings, non il codice circostante illustrato qui per fornire il contesto.

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=.\SQLExpress;Initial Catalog=aspnet-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="SchoolContext" 
         connectionString="Data Source=.\SQLExpress;Initial Catalog=School-Test;Integrated Security=True;Pooling=False;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <!-- appSettings element, comments, and system.web element -->
</configuration>

Questo codice determina la sostituzione degli attributi connectionString e providerName di ciascun elemento add nel file distribuito Web.config. Queste stringhe di connessione non sono identiche a quelle immesse nella scheda Pacchetto/Pubblicazione SQL . L'impostazione "MultipleActiveResultSets=True" è stata aggiunta perché è necessaria per Entity Framework e i provider universali.

Installazione di SQL Server Compact

Il pacchetto NuGet SqlServerCompact fornisce gli assembly del motore di database di SQL Server Compact per l'applicazione Contoso University. Ma ora non è l'applicazione ma distribuzione Web che deve essere in grado di leggere i database di SQL Server Compact, per creare script da eseguire nei database di SQL Server. Per abilitare distribuzione Web per leggere i database di SQL Server Compact, installare SQL Server Compact nel computer di sviluppo usando il collegamento seguente: Microsoft SQL Server Compact 4.0 SP1.

Distribuzione nell'ambiente di test

Per eseguire la pubblicazione nell'ambiente di test, è necessario creare un profilo di pubblicazione configurato per usare la scheda SQL pacchetto/pubblicazione per la pubblicazione del database anziché le impostazioni del database del profilo di pubblicazione.

Prima di tutto, eliminare il profilo di test esistente.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ContosoUniversity e scegliere Pubblica.

Selezionare la scheda Profilo .

Fare clic su Gestisci profili.

Selezionare Test, fare clic su Rimuovi e quindi su Chiudi.

Chiudere la procedura guidata Pubblica web per salvare questa modifica.

Creare quindi un nuovo profilo di test e usarlo per pubblicare il progetto.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ContosoUniversity e scegliere Pubblica.

Selezionare la scheda Profilo .

Selezionare <Nuovo...> dall'elenco a discesa e immettere "Test" come nome del profilo.

Nella casella URL servizio immettere localhost.

Nella casella Sito/applicazione immettere Sito Web predefinito/ContosoUniversity.

Nella casella URL di destinazione immettere http://localhost/ContosoUniversity/.

Fare clic su Avanti.

La scheda Impostazioni avvisa che è stata configurata la scheda Pacchetto/Pubblicazione SQL e offre la possibilità di eseguirne l'override facendo clic su Abilita i miglioramenti alla pubblicazione del nuovo database. Per questa distribuzione non si vuole eseguire l'override delle impostazioni della scheda Pacchetto/Pubblicazione SQL , quindi fare clic su Avanti.

Publish_Web_wizard_Settings_tab_Migrate

Un messaggio nella scheda Anteprima indica che nessun database è selezionato per la pubblicazione, ma ciò significa che la pubblicazione del database non è configurata nel profilo di pubblicazione.

Fare clic su Pubblica.

Publish_Web_wizard_Preview_tab_Migrate

Visual Studio distribuisce l'applicazione e apre il browser alla home page del sito nell'ambiente di test. Apri la pagina Instructors per verificare che visualizzi gli stessi dati di prima. Eseguire la pagina Aggiungi studenti , aggiungere un nuovo studente e quindi visualizzare il nuovo studente nella pagina Studenti . In questo modo viene verificato che è possibile aggiornare il database. Selezionare la pagina Aggiorna crediti (è necessario eseguire l'accesso) per verificare che il database di appartenenza sia stato distribuito ed è possibile accedervi.

Creazione di un database di SQL Server per l'ambiente di produzione

Dopo aver distribuito nell'ambiente di test, è possibile configurare la distribuzione nell'ambiente di produzione. Si inizia come si è fatto per l'ambiente di test creando un database in cui eseguire la distribuzione. Come si ricorderà dalla panoramica, il piano di hosting Cytanium Lite consente solo un singolo database di SQL Server, quindi verrà configurato un solo database, non due. Tutte le tabelle e i dati dei database di appartenenza e School SQL Server Compact verranno distribuiti in un unico database di SQL Server nell'ambiente di produzione.

Passare al pannello di controllo Cytanium all'indirizzo http://panel.cytanium.com. Tenere premuto il mouse su Database e quindi fare clic su SQL Server 2008.

Selezione dei Database nel Pannello di Controllo

Nella pagina SQL Server 2008 fare clic su Crea database.

Selezione_Crea_Database

Assegnare al database il nome "School" e fare clic su Salva. La pagina aggiunge automaticamente il prefisso "contosou", quindi il nome effettivo sarà "contosouSchool".)

Naming_the_database

Nella stessa pagina fare clic su Crea utente. Nei server di Cytanium, invece di usare la sicurezza integrata di Windows e consentire all'identità del pool di applicazioni di aprire il database, si creerà un utente con autorità per aprire il database. Aggiungerai le credenziali dell'utente alle stringhe di connessione che vanno nel file Web.config di produzione. In questo passaggio si creano tali credenziali.

Creazione_di_un_utente_database

Compilare i campi obbligatori nella pagina Proprietà utente SQL :

  • Immettere "ContosoUniversityUser" come nome.
  • Immettere una password.
  • Selezionare contosouSchool come database predefinito.
  • Selezionare la casella di controllo contosouSchool.

SQL_User_Properties_page

Configurazione della distribuzione del database per l'ambiente di produzione

A questo punto è possibile configurare le impostazioni di distribuzione del database nella scheda Pacchetto/Pubblicazione sql , come in precedenza per l'ambiente di test.

Aprire la finestra Proprietà progetto , selezionare la scheda Pacchetto/Pubblica SQL e assicurarsi che l'opzione Active (Release) o Release sia selezionata nell'elenco a discesa Configurazione .

Quando si configurano le impostazioni di distribuzione per ogni database, la differenza principale tra le operazioni eseguite per gli ambienti di produzione e di test consiste nel modo in cui si configurano le stringhe di connessione. Per l'ambiente di test immesso stringhe di connessione del database di destinazione diverse, ma per l'ambiente di produzione la stringa di connessione di destinazione sarà la stessa per entrambi i database. Ciò è dovuto al fatto che si distribuiscono entrambi i database in un database nell'ambiente di produzione.

Configurazione delle impostazioni di distribuzione per il database di appartenenza

Per configurare le impostazioni applicabili al database di appartenenza, selezionare la riga DefaultConnection-Deployment nella tabella Voci di database .

In Stringa di connessione per il database di destinazione immettere una stringa di connessione che punta al nuovo database SQL Server di produzione appena creato. È possibile ottenere la stringa di connessione dal messaggio di posta elettronica di benvenuto. La parte pertinente del messaggio di posta elettronica contiene la stringa di connessione di esempio seguente:

Data Source=vserver01.cytanium.com;Initial Catalog={myDataBase};User Id={myUsername};Password={myPassword};

Dopo aver sostituito le tre variabili, la stringa di connessione necessaria è simile all'esempio seguente:

Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;

Copiare e incollare questa stringa di connessione nella stringa di connessione per il database di destinazione nella scheda Pacchetto/Pubblicazione SQL .

Assicurarsi che l'opzione Pull dei dati e/o dello schema da un database esistente sia ancora selezionata e che le opzioni di scripting del database siano ancora Schema e Dati.

Nella casella Script di database deselezionare la casella di controllo accanto allo script Grant.sql.

Disable_Grant_script

Configurazione delle impostazioni di distribuzione per il database dell'istituto di istruzione

Selezionare quindi la riga SchoolContext-Deployment nella tabella Voci di database per configurare le impostazioni del database School.

Copiare la stessa stringa di connessione nel campo Stringa di connessione per il database di destinazione che hai copiato nel campo per il database di appartenenza.

Assicurarsi che l'opzione Pull dei dati e/o dello schema da un database esistente sia ancora selezionata e che le opzioni di scripting del database siano ancora Schema e Dati.

Nella casella Script di database deselezionare la casella di controllo accanto allo script Grant.sql.

Salvare le modifiche apportate alla scheda Pacchetto/Pubblicazione sql .

Configurazione delle trasformazioni Web.Config per le stringhe di connessione ai database di produzione

Successivamente, verranno configurate Web.config trasformazioni in modo che le stringhe di connessione nel file Web.config distribuito puntino al nuovo database di produzione. La stringa di connessione immessa nella scheda Package/Publish SQL per l'utilizzo da parte di Distribuzione Web è la stessa che l'applicazione deve usare, tranne per l'aggiunta dell'opzione MultipleResultSets.

Aprire Web.Production.config e sostituire l'elemento connectionStrings con un connectionStrings elemento simile all'esempio seguente. Copiare solo l'elemento connectionStrings , non i tag circostanti forniti per visualizzare il contesto.

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    <add name="SchoolContext" 
         connectionString="Data Source=vserver01.cytanium.com;Initial Catalog=contosouSchool;User Id=ContosoUniversityUser;Password=Password;MultipleActiveResultSets=True" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
  </connectionStrings>
  <!-- appSettings element, comments, and system.web element -->
</configuration>

A volte vengono visualizzati consigli che indicano di crittografare sempre le stringhe di connessione nel file diWeb.config . Questo potrebbe essere appropriato se si distribuisce ai server nella rete della propria azienda. Quando si esegue la distribuzione in un ambiente di hosting condiviso, tuttavia, si considera attendibile le procedure di sicurezza del provider di hosting e non è necessario o pratico crittografare le stringhe di connessione.

Distribuzione nell'ambiente di produzione

A questo momento si è pronti per la distribuzione nell'ambiente di produzione. Distribuzione Web leggerà i database di SQL Server Compact nella cartella App_Data del progetto e creerà nuovamente tutte le tabelle e i dati nel database SQL Server di produzione. Per pubblicare usando le impostazioni della scheda Pacchetto/Pubblicazione Web, è necessario creare un nuovo profilo di pubblicazione per la produzione.

Innanzitutto, elimina il profilo di produzione esistente come hai fatto precedentemente con il profilo di test.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ContosoUniversity e scegliere Pubblica.

Selezionare la scheda Profilo .

Fare clic su Gestisci profili.

Selezionare Produzione, fare clic su Rimuovi e quindi su Chiudi.

Chiudere la procedura guidata Pubblica web per salvare questa modifica.

Creare quindi un nuovo profilo di produzione e usarlo per pubblicare il progetto.

In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto ContosoUniversity e scegliere Pubblica.

Selezionare la scheda Profilo .

Fare clic su Importa e selezionare il file con estensione publishsettings scaricato in precedenza.

Nella scheda Connessione modificare l'URL di destinazione con l'URL temporaneo corretto, che in questo esempio è http://contosouniversity.com.vserver01.cytanium.com.

Rinominare il profilo in Produzione. Selezionare la scheda Profilo e fare clic su Gestisci profili per eseguire questa operazione.

Chiudere la procedura guidata Pubblica web per salvare le modifiche.

In un'applicazione reale in cui il database è stato aggiornato nell'ambiente di produzione, è necessario eseguire due passaggi aggiuntivi prima della pubblicazione:

  1. Carica app_offline.htm, come mostrato nel tutorial Distribuzione nell'ambiente di produzione.
  2. Usare la funzionalità Gestione file del pannello di controllo Cytanium per copiare i file aspnet-Prod.sdf e School-Prod.sdf dal sito di produzione alla cartella App_Data del progetto ContosoUniversity. In questo modo, i dati distribuiti nel nuovo database di SQL Server includono gli aggiornamenti più recenti eseguiti dal sito Web di produzione.

Nella barra degli strumenti Web con un clic su Pubblica verificare che il profilo di produzione sia selezionato e quindi fare clic su Pubblica.

Se è stato caricatoapp_offline.htm prima della pubblicazione, è necessario usare l'utilità Gestione file nel pannello di controllo Cytanium per eliminare app_offline.htm prima di eseguire il test. È anche possibile eliminare contemporaneamente i file con estensione sdf dalla cartella App_Data .

È ora possibile aprire un browser e passare all'URL del sito pubblico per testare l'applicazione nello stesso modo in cui è stata eseguita dopo la distribuzione nell'ambiente di test.

Passaggio a SQL Server Express LocalDB in fase di sviluppo

Come illustrato nella panoramica, in genere è consigliabile usare lo stesso motore di database nello sviluppo usato in fase di test e produzione. Tenere presente che il vantaggio dell'uso di SQL Server Express nello sviluppo è che il database funzionerà nello stesso ambiente di sviluppo, test e produzione. In questa sezione si configurerà il progetto ContosoUniversity per l'uso di SQL Server Express LocalDB quando si esegue l'applicazione da Visual Studio.

Il modo più semplice per eseguire questa migrazione consiste nell'consentire a Code First e al sistema di appartenenza di creare automaticamente entrambi i nuovi database di sviluppo. L'uso di questo metodo per eseguire la migrazione richiede tre passaggi:

  1. Modificare le stringhe di connessione per specificare nuovi database SQL Express LocalDB.
  2. Eseguire lo strumento di amministrazione del sito Web per creare un utente amministratore. In questo modo viene creato il database di appartenenza.
  3. Usare il comando Code First Migrations update-database per creare e inizializzare il database dell'applicazione.

Aggiornamento delle stringhe di connessione nel file di Web.config

Aprire il file Web.config e sostituire l'elemento connectionStrings con il codice seguente:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-Dev.mdf;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
  <add name="SchoolContext" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\School-Dev.mdf;MultipleActiveResultSets=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

Creazione del database di appartenenza

In Esplora soluzioni selezionare il progetto ContosoUniversity e quindi fare clic su ASP.NET Configurazione nel menu Progetto .

Seleziona la scheda Sicurezza.

Fare clic su Crea o gestisci ruoli e quindi creare un ruolo di amministratore .

Tornare alla scheda Sicurezza.

Fare clic su Crea utente e quindi selezionare la casella di controllo Amministratore e creare un utente denominato admin.

Chiudere lo strumento di amministrazione del sito Web.

Creazione del database dell'istituto di istruzione

Aprire la finestra Console di Gestione pacchetti.

Nell'elenco a discesa Progetto predefinito selezionare il progetto ContosoUniversity.DAL.

Immettere il comando seguente:

update-database

Le migrazioni Code First applicano la migrazione iniziale che crea il database e quindi applica la migrazione AddBirthDate, quindi esegue il metodo Seed.

Esegui il sito web premendo Ctrl+F5. Come si è fatto per gli ambienti di test e produzione, eseguire la pagina Aggiungi studenti , aggiungere un nuovo studente e quindi visualizzare il nuovo studente nella pagina Studenti . In questo modo viene verificato che il database School sia stato creato e inizializzato e che tu abbia i permessi di accesso in lettura e scrittura.

Selezionare la pagina Aggiorna crediti e accedere per verificare che il database di appartenenza sia stato distribuito e che sia possibile accedervi. Se non è stata eseguita la migrazione degli account utente, creare un account amministratore e quindi selezionare la pagina Aggiorna crediti per verificare che funzioni.

Pulizia dei file di SQL Server Compact

Non sono più necessari file e pacchetti NuGet inclusi per supportare SQL Server Compact. Se si vuole (questo passaggio non è obbligatorio), è possibile pulire i file e i riferimenti non necessari.

In Esplora soluzioni, eliminare i file .sdf dalla cartella App_Data e le cartelle amd64 e x86 dalla cartella bin.

In Esplora soluzioni fare clic con il pulsante destro del mouse sulla soluzione (non uno dei progetti) e quindi scegliere Gestisci pacchetti NuGet per la soluzione.

Nel riquadro sinistro della finestra di dialogo Gestisci pacchetti NuGet selezionare Pacchetti installati.

Selezionare il pacchetto EntityFramework.SqlServerCompact e fare clic su Gestisci.

Nella finestra di dialogo Seleziona progetti sono selezionati entrambi i progetti. Per disinstallare il pacchetto in entrambi i progetti, deselezionare entrambe le caselle di controllo, quindi fare clic su OK.

Nella finestra di dialogo che chiede se si desidera disinstallare anche i pacchetti dipendenti, fare clic su No. Uno di questi è il pacchetto Entity Framework che è necessario mantenere.

Seguire la stessa procedura per disinstallare il pacchetto SqlServerCompact . I pacchetti devono essere disinstallati in questo ordine perché il pacchetto EntityFramework.SqlServerCompact dipende dal pacchetto SqlServerCompact .

È stata completata la migrazione a SQL Server Express e a SQL Server completo. Nell'esercitazione successiva si modificherà un altro database e si vedrà come distribuire le modifiche del database quando i database di test e produzione usano SQL Server Express e SQL Server completo.