Crear una cadena de conexión y trabajar con SQL Server LocalDB

por Rick Anderson

Nota:

Existe una versión actualizada de este tutorial, disponible aquí, donde se usa la versión más reciente de Visual Studio. El nuevo tutorial usa ASP.NET Core MVC, que proporciona muchas mejoras en este tutorial.

En este tutorial se muestra ASP.NET Core MVC con controladores y vistas. Razor Pages es una nueva alternativa en ASP.NET Core 2.0, un modelo de programación basado en páginas que facilita la compilación de interfaces de usuario web y hace que sean más productivas. Se recomienda probar el tutorial de las páginas de Razor antes que la versión MVC. El tutorial de las páginas de Razor:

  • Es más fácil de seguir.
  • Abarca más características.
  • Es el método preferido para el desarrollo de nuevas aplicaciones.

Crear una cadena de conexión y trabajar con SQL Server LocalDB

La clase MovieDBContext que ha creado maneja la tarea de conexión a la base de datos y la asignación de objetos Movie a los registros de la base de datos. Pero seguramente se pregunte cómo especificar a qué base de datos se conectará. En realidad, no es necesario especificar la base de datos que se va a usar, Entity Framework usará LocalDB de forma predeterminada. En esta sección agregaremos explícitamente una cadena de conexión en el archivo Web.config de la aplicación.

SQL Server Express LocalDB

LocalDB es una versión ligera del Motor de base de datos de SQL Server Express que se inicia a petición y se ejecuta en modo usuario. LocalDB se ejecuta en un modo de ejecución especial de SQL Server Express que permite trabajar con bases de datos como archivos .mdf. Normalmente los archivos de base de datos de LocalDB se conservan en la carpeta App_Data de un proyecto web.

SQL Server Express no se recomienda para su uso en aplicaciones web de producción. LocalDB en particular no debería usarse para producción con una aplicación web porque no está diseñado para trabajar con IIS. Sin embargo, una base de datos de LocalDB se puede migrar fácilmente a SQL Server o SQL Azure.

En Visual Studio 2017, LocalDB se instala de forma predeterminada con Visual Studio.

De manera predeterminada, Entity Framework busca una cadena de conexión que tenga el mismo nombre que la clase de contexto del objeto (MovieDBContext para este proyecto). Para más información, consulte Cadenas de conexión de SQL Server para aplicaciones web de ASP.NET.

Abra el archivo raíz Web.config de la aplicación. (No el archivo Web.config de la carpeta Vistas).

Screenshot that shows the Solution Explorer window and Web dot config is selected and circled in red.

Encuentre el elemento <connectionStrings>:

Screenshot that shows code and the connection string element is circled in red.

Agregue la siguiente cadena de conexión al elemento <connectionStrings> del archivo Web.config.

<add name="MovieDBContext" 
   connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Movies.mdf" 
   providerName="System.Data.SqlClient" 
/>

En el ejemplo siguiente se muestra una parte del archivo Web.config con la nueva cadena de conexión agregada:

<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie-fefdc1f0-bd81-4ce9-b712-93a062e01031;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-MvcMovie-fefdc1f0-bd81-4ce9-b712-93a062e01031.mdf" providerName="System.Data.SqlClient" />
  <add name="MovieDBContext" connectionString="Data Source=(LocalDb)\MSSQLLocalDB;Initial Catalog=aspnet-MvcMovie;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\Movies.mdf" providerName="System.Data.SqlClient" />
</connectionStrings>

Las dos cadenas de conexión son muy similares. La primera cadena de conexión se denomina DefaultConnection y se usa para que la base de datos de pertenencia controle quién puede acceder a la aplicación. La cadena de conexión que ha agregado especifica una base de datos de LocalDB denominada Movie.mdf ubicada en la carpeta App_Data. En este tutorial no usaremos la base de datos de pertenencia; para obtener más información sobre la pertenencia, la autenticación y la seguridad, consulte mi tutorial Crear una aplicación de MVC de ASP.NET con autenticación y SQL DB e implementar en Azure App Service.

El nombre de la cadena de conexión debe coincidir con el nombre de la clase DbContext.

using System;
using System.Data.Entity;

namespace MvcMovie.Models
{
    public class Movie
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public DateTime ReleaseDate { get; set; }
        public string Genre { get; set; }
        public decimal Price { get; set; }
    }

    public class MovieDBContext : DbContext
    {
        public DbSet<Movie> Movies { get; set; }
    }
}

Realmente no es necesario agregar la cadena de conexión MovieDBContext. Si no especifica una cadena de conexión, Entity Framework creará una base de datos de LocalDB en el directorio de usuarios con el nombre completo de la clase DbContext (en este caso MvcMovie.Models.MovieDBContext). Puede nombrar la base de datos como quiera, siempre y cuando tenga el sufijo .MDF. Por ejemplo, podríamos llamar a la base de datos MyFilms.mdf.

A continuación, creará una nueva clase MoviesController que puede usar para mostrar los datos de las películas y permitir a los usuarios creen nuevas listas de películas.