SQL en Windows Phone 7

La semana pasada, mientras daba la charla sobre Windows Phone 7 y Windows 8 en Cervantes, una persona me preguntó sobre como incorporar una base de datos dentro del dispositivo, propiamente dicho, en Windows Phone 7, y así poder usarla desde una aplicación.

 

Posiblemente recordarán a SQL CE, mismo que venía en las versiones de Windows Mobile, con editor de consultas y todo. Bueno, aquí, en WP7 tenemos el mismo motor aunque, lamentablemente, no tengamos a disposición las mismas herraminetas que Windows Mobile.

En este caso es necesario hacer uso de Linq To SQL para el mapeo de datos, pero, todo desde código. O sea, no tenemos, de momento, un mapeador automático, o una forma de crear la base de datos antes del deployment. Posiblemente esto se deba a la arquitectura de WP7, donde necesitamos pedirle permiso al SO para poder crear archivos. En todo caso, aquí un ejemplo.

El primer paso será crear nuestra entidad de datos que mapeará con la tabla en base de datos:

[Table(Name="User")]
public class User
{
    [Column(IsDbGenerated=true, IsPrimaryKey=true)]
    public int UserId { get; set; }

    [Column(CanBeNull=false)]
    public string UserName { get; set; }

    [Column(CanBeNull = false)]
    public string Password { get; set; }

    [Column(CanBeNull = false)]
    public string Email { get; set; }

    [Column(CanBeNull = false)]
    public string FullName { get; set; }

    [Column(CanBeNull = true)]
    public string Address { get; set; }
}

El siguiente paso es crear el contexto de la base de datos, el cual incluirá la tabla como una colección de elementos del tipo indicado.

public class DBContext : DataContext
{
    public DBContext(string connectionString) : base(connectionString) { }

    public Table<User> Users
    {
        get
        {
            return this.GetTable<User>();
        }
    }
}

Con todo el mapeo en su lugar, solo nos queda verificar la existencia de la base de datos, su creación desde el código y la manipulación de datos. Aquí vemos como realizamos estos tres pasos.

using (DBContext context = new DBContext("isostore:/Database.sdf"))
{

    if (!context.DatabaseExists())
    {
        context.CreateDatabase();

        User user = new User();
        user.FullName = "Juan Gomez";
        user.Password = "";
        user.Email = "juan@email.com";
        user.UserName = "juna1234";
        user.Address = null;

        context.Users.InsertOnSubmit(user);
        context.SubmitChanges();
    }
}

Para leer estos valores, por ejemplo, todos los usuarios.

using (DBContext context = new DBContext("isostore:/Database.sdf"))
{
    listBox1.ItemsSource = context.Users.ToList();
}

Como resultado, podremos ver en una lista todos los registros contenidos en la tabla Users.



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s