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: 9 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 Azure App Service Web Apps, consulte Implementación web de ASP.NET con Visual Studio.

Información general

En este tutorial, realizará un cambio de base de datos (con los cambios de código relacionados) probará los cambios en Visual Studio y, a continuación, implementará la actualización en los entornos de prueba y producción.

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, agregará una columna de fecha de nacimiento a la Person clase base para las entidades Student y Instructor. A continuación, actualice la página que muestra los datos del instructor para que muestre la nueva columna.

En el proyecto ContosoUniversity.DAL, abra Person.cs y agregue la siguiente propiedad al final de la Person clase (debe haber dos llaves de cierre a continuación):

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

A continuación, actualice el método Seed para que proporcione un valor para la nueva columna. Abra Migrations\Configuration.cs y reemplace el bloque de código que comienza por var instructors = new List<Instructor> por el siguiente bloque de código que incluye información de fecha de nacimiento:

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

En el proyecto ContosoUniversity, abra Instructors.aspx y agregue un nuevo campo de plantilla para mostrar la fecha de nacimiento. Agréguelo entre los de la fecha de contratación y la asignación de oficina:

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

(Si la sangría de código no está sincronizada, puede presionar CTRL-K y, a continuación, CTRL-D para volver a formatear automáticamente el archivo).

Compile la solución y, a continuación, abra la ventana Consola del administrador de paquetes. Asegúrese de que ContosoUniversity.DAL todavía está seleccionado como Proyecto predeterminado.

En la ventana Consola del administrador de paquetes, seleccione ContosoUniversity.DAL como Proyecto predeterminado y escriba el siguiente comando:

add-migration AddBirthDate

Cuando este comando finaliza, Visual Studio abre el archivo de clase que define la nueva DbMigration clase y, en el Up método, puede ver el código que crea la nueva columna.

AddBirthDate_migration_code

Compile la solución y escriba el siguiente comando en la ventana Consola del administrador de paquetes (asegúrese de que el proyecto ContosoUniversity.DAL todavía está seleccionado):

update-database

Cuando finalice el comando, ejecute la aplicación y seleccione la página Instructors. Cuando se cargue la página, verá que tiene el nuevo campo de fecha de nacimiento.

Instructors_page_with_birth_date

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

En el Explorador de soluciones, seleccione el proyecto ContosoUniversity.

En la barra de herramientas Publicar web con un solo clic, seleccione el perfil de publicación Prueba y, a continuación, haga clic en Publicar web. (Si la barra de herramientas está deshabilitada, seleccione el proyecto ContosoUniversity en el Explorador de soluciones).

Visual Studio implementa la aplicación actualizada y el explorador se abre en la página principal. Ejecute la página Instructors para comprobar que la actualización se implementó correctamente. Cuando la aplicación intenta acceder a la base de datos de esta página, Code First actualiza el esquema de la base de datos y ejecuta el Seed método. Cuando se muestre la página, verá la columna Fecha de nacimiento esperada con fechas en ella.

Instructors_page_with_birth_date_Test

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

Ahora puede implementar en producción. La única diferencia es que usará app_offline.htm para evitar que los usuarios accedan al sitio y, por tanto, actualicen la base de datos mientras se implementan cambios. Para la implementación de producción, realice los pasos siguientes:

  • Cargue el archivo app_offline.htm en el sitio de producción.
  • En Visual Studio, elija el perfil de producción en la barra de herramientas Publicar web con un solo clic y haga clic en Publicar web.
  • Elimine el archivo app_offline.htm del sitio de producción.

Nota:

Mientras la aplicación está en uso en el entorno de producción, debe implementar un plan de recuperación. Es decir, debe copiar periódicamente los archivos School-Prod.sdf y aspnet-Prod.sdf desde el sitio de producción a una ubicación de almacenamiento segura y debe mantener varias generaciones de dichas copias de seguridad. Al actualizar la base de datos, debe realizar una copia de seguridad inmediatamente anterior al cambio. Después, si comete un error y no lo detecta hasta que lo haya implementado en producción, podrá recuperar la base de datos al estado en el que estaba antes de que resultara dañada.

Cuando Visual Studio abre la dirección URL de la página principal en el explorador, se muestra la página app_offline.htm. Después de eliminar el archivo app_offline.htm, puede volver a ir a la página principal para comprobar que la actualización se ha implementado correctamente.

Instructors_page_with_birth_date_Prod

Ahora ha implementado una actualización de aplicación que incluye un cambio de base de datos en pruebas y producción. En el siguiente tutorial se muestra cómo migrar la base de datos de SQL Server Compact a SQL Server Express y SQL Server.