Entity Framework 6 y Sql Server Compact CE en ASP.NET MVC 5
Seguramente en ciertas ocasiones, nos hemos visto en la necesidad de desarrollar una aplicación con acceso a datos, y por las razones que fueran, no hemos podido disponer de un servidor de bases de datos real sobre el cual trabajar durante el proceso de desarrollo.
Para este tipo de eventualidades, la base de datos Sql Server Compact CE en conjunción con el ORM Entity Framework, nos proporciona una forma muy sencilla de implementar un sistema de persistencia integrado en el proyecto (App_Data
) totalmente operativo, ligero, compacto y funcional.
En este Post, veremos como implementar una Base de Datos Sql Server Compact 4.0 gestionada a través de Entity Framework 6, en un proyecto ASP.NET MVC 5.
Creando el proyecto
Para este ejemplo, utilizaremos Visual Studio 2017 para crear un nuevo proyecto Web MVC, con plataforma de destino .NET Framework 4.6.1 (>= 4.5).
Instalando Sql Server Compact
A continuación instalaremos Sql Server Compact 4.0, a través del paquete NuGet Microsoft.SqlServer.Compact. Para ello abriremos la consola de administración de paquetes NeGet (Herramientas > Administrador de paquetes NuGet > Consola del Administrador de paquetes) y ejecutaremos el siguiente comando:
PM> Install-Package Microsoft.SqlServer.Compact -Version 4.0.8876.1
Una vez instalado el paquete, observaremos que en el proyecto se ha creado una nueva carpeta _bin_deployableAssemblies
, donde se encuentran las librerías del motor de base de datos Sql Server Compact.
Instalando Entity Framework
Una vez instalado el motor de base de datos en nuestro proyecto, procederemos a instalar el ORM Entity Framework 6.
Desde la consola de administración de paquetes NuGet, ejecutaremos los siguientes comandos:
PM> Install-Package EntityFramework -Version 6.2.0
...
...
PM> Install-Package EntityFramework.SqlServerCompact -Version 6.2.0
El contexto de datos
Ahora crearemos la clase ApplicationDbContext.cs
que será la encargada de gestionar el contexto de datos de Entity Framework.
Esta clase deberá de heredar de System.Data.Entity.DbContext
, y llamará al constructor de su clase base (DbContext
) con el nombre de la cadena de conexión a la base da datos Sql Server Compact.
public class ApplicationDbContext : DbContext
{
public ApplicationDbContext() : base("DatabaseConnection")
{
}
public DbSet<PaisViewModel> Paises { get; set; }
// ...
}
Como vemos, también hemos definido una propiedad del tipo DbSet<T>
, que definirá el modelo de datos con el que vamos a trabajar, en este caso será PaisViewModel.cs
.
public class PaisViewModel
{
[Key]
public int Id { get; set; }
[Required]
[StringLength(50, MinimumLength = 3)]
public string Nombre { get; set; }
public int Habitantes { get; set; }
}
La cadena de conexión
En el archivo Web.config
del proyecto, definiremos la cadena de conexión hacia la base de datos de la siguiente manera:
<connectionStrings>
<add name="DatabaseConnection" connectionString="Data Source=|DataDirectory|db.sdf;"
providerName="System.Data.SqlServerCE.4.0" />
</connectionStrings>
Importante: Cabe destacar que el origen de datos (
Data Source=
) lo hemos definido utilizando la notación "|DataDirectory|
" que hace referencia al la carpetaApp_Data
de nuestro proyecto web, más "db.sdf
" que será el nombre de la base de datos.
Creando la base de datos
Llegados a este punto, ya podemos crear físicamente la base de datos en nuestro proyecto. Esto lo haremos mediante migraciones de Entity Framework, a través de comandos Code First desde la consola de administración de paquetes NuGet.
Habilitando las migraciones
En primer lugar, habilitaremos las migraciones en nuestro proyecto, mediante el siguiente comando:
PM> Enable-Migrations -force
Una vez finalizada con éxito la ejecución del comando, podemos ver como se ha creado una nueva carpeta Migrations
con una clase de configuración Configuration.cs
en nuestro proyecto.
Creando la migración Inicial
Seguidamente, crearemos la primera migración (de nombre "Inicial") hacia la base de datos, mediante el siguiente comando:
PM> Add-Migration Inicial
La correcta ejecución de este comando, creará en la carpeta Migrations
un nuevo archivo de migración del tipo 201904132056412_Inicial.cs
.
Este archivo o clase de migración, contendrá básicamente los métodos para crear (Up()
) o deshacer (Down()
) los últimos cambios del Modelo de datos, sobre la base de datos en la que estemos trabajando (en este caso Sql Server Compact).
public partial class Inicial : DbMigration
{
public override void Up()
{
CreateTable(
"dbo.PaisViewModels",
c => new
{
Id = c.Int(nullable: false, identity: true),
Nombre = c.String(nullable: false, maxLength: 50),
Habitantes = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id);
}
public override void Down()
{
DropTable("dbo.PaisViewModels");
}
}
Aplicando la migración Inicial
Por último, solo quedaría aplicar las modificaciones de la migración Inicial a la base de datos Sql Server Compact.
Eso lo haremos mediante el siguiente comando:
PM> Update-Database
Importante: El comando
Update-Database
, no solo aplica los cambios de las migraciones pendientes (en nuestro caso sólo la "Inicial") hacia la base de datos, sino que además comprueba si la base de datos existe, y si no es así, la crea según el Data Source indicado en la cadena de conexión.
En este punto, y si todo ha ido bien, ya tendremos creada nuestra base de datos Sql Server Compact en nuestro proyecto web ASP.NET MVC 5.
Como ya comentamos anteriormente, la base de datos se creará en la carpeta App_Data
, con el nombre que indicamos en la propiedad Data Source de la cadena de conexión.
Consideraciones finales
Una vez llegados a este punto, ya podemos utilizar nuestra base de datos Sql Server Compact a través de una instancia del contexto de datos ApplicationDbContext
.
Como ejemplo, y para probar nuestro proyecto, podemos crear el Controlador PaisController.cs
con la siguiente estructura:
public class PaisController : Controller
{
private ApplicationDbContext _dbContext;
// GET: Pais/List
public ActionResult List()
{
using (_dbContext = new ApplicationDbContext())
{
_dbContext.Paises.Add(new PaisViewModel()
{
Id = 1,
Nombre = "España",
Habitantes = 1000000
});
_dbContext.SaveChanges();
return View(_dbContext.Paises.ToList());
}
}
}
Nota: Por supuesto, no olvidar crear la Vista asociada
List.cshtml
.
Posiblemente, también nos interese disponer de alguna herramienta que nos permita administrar y gestionar nuestra base de datos integrada Sql Server Compact. Para estos cometidos, disponemos de la extensión para Visual Studio SQLite/SQL Server Compact Toolbox.
Una vez instalado este complemento, podemos acceder a la interfaz de administración, a través de Herramientas > SQLite/SQL Server Compact Toolbox.
Nuevo comentario
Comentarios
No hay comentarios para este Post.