Implementación de una aplicación web de ASP.NET con SQL Server Compact mediante Visual Studio o Visual Web Developer: implementación de una actualización de base de datos de SQL Server: 11 de 12

de Tom Dykstra

Descarga del proyecto de inicio

En esta serie de tutoriales se muestra cómo implementar (publicar) un proyecto de aplicación web de ASP.NET que incluye una base de datos de SQL Server Compact mediante Visual Studio 2012 RC o Visual Studio Express 2012 RC para la web. También puede usar Visual Studio 2010 si instala la actualización de publicación web. Para obtener una introducción a la serie, consulte el primer tutorial de la serie.

Para ver un tutorial que muestra las características de implementación introducidas después de la versión RC de Visual Studio 2012, muestra cómo implementar ediciones de SQL Server distintas de SQL Server Compact y muestra cómo implementar en Windows Azure Web Services, consulte Implementación web de ASP.NET con Visual Studio.

Información general

En este tutorial se muestra cómo implementar una actualización de base de datos en una base de datos completa de SQL Server. Dado que las migraciones de Code First realiza todo el trabajo de actualizar la base de datos, el proceso es casi idéntico al que hizo para SQL Server Compact en el tutorial Implementación de una actualización de base de datos.

Aviso: Si recibe un mensaje de error o algo no funciona mientras recorre el tutorial, asegúrese de comprobar la página de solución de problemas.

Agregar una nueva columna a una tabla

En esta sección del tutorial, realizará un cambio en la base de datos y los cambios de código correspondientes y los probará en Visual Studio como preparación para su implementación en los entornos de prueba y producción. El cambio implica agregar una OfficeHours columna a la Instructor entidad y mostrar la nueva información en la página web de instructores.

En el proyecto ContosoUniversity.DAL, abra Instructor.cs y agregue la siguiente propiedad entre las propiedades HireDate y Courses:

[MaxLength(50)]
public string OfficeHours { get; set; }

Actualice la clase de inicializador para que se inicializa la nueva columna con datos de prueba. Abra Migrations\Configuration.cs y reemplace el bloque de código que comienza var instructors = new List<Instructor> por el siguiente bloque de código que incluye la nueva columna:

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" }
};

En el proyecto ContosoUniversity, abra Instructors.aspx y agregue un nuevo campo de plantilla para las horas de oficina justo antes de la etiqueta de cierre </Columns> en el primer control 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>

Compile la solución.

Abra la ventana Consola del administrador de paquetes y seleccione ContosoUniversity.DAL como Proyecto predeterminado.

Escriba los siguientes comandos:

add-migration AddOfficeHoursColumn

update-database

Ejecute la aplicación y seleccione la página Instructors. La página tarda un poco más de lo habitual en cargarse, ya que Entity Framework vuelve a crear la base de datos y la inicializa con datos de prueba.

Instructors_page_with_office_hours

Implementación de la actualización de la base de datos en el entorno de prueba

Cuando se usan migraciones de Code First, el método para implementar un cambio de base de datos en SQL Server es el mismo que para SQL Server Compact. Sin embargo, debe cambiar el perfil de publicación de pruebas porque todavía está configurado para migrar de SQL Server Compact a SQL Server.

El primer paso es quitar las transformaciones de cadena de conexión que creó en el tutorial anterior. Estos ya no son necesarios porque especificará transformaciones de cadena de conexión en el perfil de publicación, como hizo antes de configurar la pestaña Empaquetar/Publicar SQL para la migración a SQL Server.

Abra el archivo Web.Test.config y quite el elemento connectionStrings. La única transformación restante en el archivo Web.Test.config es para el valor Environment del elemento appSettings.

Ahora puede actualizar el perfil de publicación y publicar en el entorno de prueba.

Abra el asistente para Publicar web y, a continuación, cambie a la pestaña Perfil.

Seleccione el perfil de publicación de Prueba.

Seleccione la pestaña Configuración.

Haga clic en Habilitar las nuevas mejoras de publicación de bases de datos.

En el cuadro cadena de conexión de SchoolContext, escriba el mismo valor que usó en el archivo de transformación Web.Test.config del tutorial anterior:

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

Seleccione Ejecutar Migraciones de Code First (se ejecuta al iniciarse la aplicación). (En la versión de Visual Studio, es posible que la casilla se etiquete Aplicar migraciones de Code First).

En el cuadro cadena de conexión de DefaultConnection, escriba el mismo valor que usó en el archivo de transformación Web.Test.config del tutorial anterior:

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

Deje desactivada la opción Actualizar base de datos.

Haga clic en Publicar.

Visual Studio implementa los cambios de código en el entorno de prueba y abre el explorador en la página principal de Contoso University.

Seleccione la página Instructors.

Cuando la aplicación ejecuta esta página, intenta acceder a la base de datos. Migraciones de Code First comprueba si la base de datos está actualizada y encuentra que aún no se ha aplicado la migración más reciente. Code First Migrations aplica la migración más reciente, ejecuta el método Seed y, a continuación, la página se ejecuta normalmente. Verá la nueva columna Office Hours con los datos de inicialización.

Instructors_page_with_OfficeHours_Test

Implementación de la actualización de la base de datos en el entorno de producción

También debe cambiar el perfil de publicación para el entorno de producción. En este caso, quitará el perfil existente y creará uno nuevo mediante la importación de un archivo .publishsettings actualizado. El archivo actualizado incluirá la cadena de conexión de la base de datos de SQL Server en Cytanium.

Como vio al implementar en el entorno de prueba, ya no necesita transformaciones de cadena de conexión en el archivo de transformación Web.Production.config. Abra ese archivo y quite el elemento connectionStrings. Las transformaciones restantes son para el valor Environmentdel elemento appSettings y el elemento location que restringe el acceso a los informes de errores de Elmah.

Antes de crear un nuevo perfil de publicación para producción, descargue un archivo .publishsettings actualizado de la misma manera que hizo anteriormente en el tutorial Implementación en el entorno de producción. (En el panel de control cytanium, haga clic en Sitios web y, a continuación, haga clic en el sitio web de contosouniversity.com. Seleccione la pestaña Publicación web y, a continuación, haga clic en Descargar perfil de publicación para este sitio web). La razón por la que lo hace es recoger la cadena de conexión de la base de datos en el archivo .publishsettings. La cadena de conexión no estaba disponible la primera vez que descargó el archivo, ya que todavía estaba usando SQL Server Compact y aún no había creado la base de datos de SQL Server en Cytanium.

Ahora puede actualizar el perfil de publicación y publicar en el entorno de producción.

Abra el asistente para Publicar web y, a continuación, cambie a la pestaña Perfil.

Haga clic en Administrar perfilesy, a continuación, elimine el perfil de producción.

Cierre el Asistente para publicar web para guardar este cambio.

Vuelva a abrir el asistente para Publicar web y, a continuación, haga clic en Importar.

En la pestaña Conexión, cambie Dirección URL de destino al valor adecuado si usa una dirección URL temporal.

Haga clic en Next.

En la pestaña Configuración, haga clic en Habilitar las nuevas mejoras de publicación de bases de datos.

En la lista desplegable cadena de conexión de SchoolContext, seleccione la cadena de conexión Cytanium.

Selecting_Cytanium_connection_string

Seleccione Ejecutar Migraciones de Code First (se ejecuta al iniciarse la aplicación).

En la lista desplegable cadena de conexión de DefaultConnection, seleccione la cadena de conexión Cytanium.

Seleccione la pestaña Perfil, haga clic en Administrar perfiles y cambie el nombre del perfil de "contosouniversity.com - Web Deploy" a "Producción".

Cierre el perfil de publicación para guardar el cambio y vuelva a abrirlo.

Haga clic en Publicar. (En el caso de un sitio web de producción real, copiaría app_offline.htm en producción y lo colocaría en la carpeta del proyecto antes de publicarlo y, a continuación, quitarlo cuando se complete la implementación).

Visual Studio implementa los cambios de código en el entorno de prueba y abre el explorador en la página principal de Contoso University.

Seleccione la página Instructors.

Code First Migrations actualiza la base de datos de la misma manera que hizo en el entorno de prueba. Verá la nueva columna Office Hours con los datos de inicialización.

Instructors_page_with_OfficeHours_Prod

Ahora ha implementado correctamente una actualización de la aplicación que incluía un cambio de base de datos mediante una base de datos de SQL Server.

Más información

Esto completa esta serie de tutoriales sobre la implementación de una aplicación web de ASP.NET en un proveedor de hospedaje de terceros. Para obtener más información sobre cualquiera de los temas tratados en estos tutoriales, consulte el mapa de contenido de implementación de ASP.NET en el sitio web de MSDN.

Agradecimientos

Me gustaría agradecer a las siguientes personas que han aportado contribuciones significativas al contenido de esta serie de tutoriales: