Una de las características atractivas de las aplicaciones para Windows Phone, es la posibilidad de incorporar almacenamiento local en SQL CE. Mucho se discute y es sabido que existen diversas técnicas, pero como siempre muchos de vosotros preguntáis por la “Chuleta” paso a paso o pequeño laboratorio guía para iniciarnos en su uso.
La idea principal es utilizar “SQL Metal” para construir nuestro “Data Context”, nuestra clase se acceso a datos se creara a partir de nuestra BD. En tono de humor será nuestro “Entity Framework” trabajando en invertido J
Aquí tenéis el laboratorio de introducción paso, paso… espero que os sea asequible i de utilidad.
Crear la Base de datos.
Desde el explorador de servidores de Visual Studio, agregaremos una conexión :
Seleccionaremos SQL CE

Pondremos nombre a nuestra base de datos

Seleccionar “Crear”
Crear La tabla:




Con esto finalizaremos la creación de nuestra BD “WinPhoneData” y la tabla “LocalizationData”.
El siguiente paso consistirá en crearnos la clase con el contexto de datos para nuestra aplicación.
En primer lugar deberemos invocar el “CMD” o “Power Shell”, dependiendo de vuestros gustos. Los siguientes pasos serán muy sencillos, pues requerirán simplemente dos mandatos:
Es importante observar la Invocación a SQL Metal, pasándole las ubicaciones de la “sdf” anteriormente creada y el lenguaje destino para la generación de nuestra clase de acceso a datos.
1) Añadir a nuestro Path la referencia a “\Program Files\Microsoft SDKs\Windows\v7.0A\bin”
2) sqlmetal d:\WinPhoneData.sdf /language:vb /namespace:WinPhoneData /pluralize /code:d:WinPhoneData.vb
Una vez ejecutados dichos comandos, tendremos nuestra “WinPhoneData.vb” lista para ser utilizada en nuestro Windows Phone Project.
Por lo tanto nuestros próximos pasos serán muy fáciles, Desde nuestra instancia de Visual Studio, crearemos un nuevo proyecto “Windows Phone”.

Evidentemente seleccionaremos el SO 7.1.

Para que todo ruede a la perfección no deberemos olvidar las referencias a System.Data.Linq
Desde las propiedades del proyecto, seleccionaremos la de añadir un elemento existente:

Agregando la clase generada anteriormente.

La clase generada por Sqlmetal, no es 100% compatible, pues implementa ‘IDBConnection’ deberemos editar “WinPhoneData.vb” y eliminar los sub’s “New’s” sobrecargados, para conexiones ‘Idb’.
Public Sub New(ByVal connection As System.Data.IDbConnection)
MyBase.New(connection, mappingSource)
OnCreated()
End Sub
Public Sub New(ByVal connection As System.Data.IDbConnection,
ByVal mappingSource As System.Data.Linq.Mapping.MappingSource)
MyBase.New(connection, mappingSource)
OnCreated()
End Sub
Una vez completado este punto, podremos compilar la aplicación. Sin ningún tipo de problemas. Luego es tarea de cada cual adaptar los requerimientos navegando a través de sus propiedades y métodos… por ejemplo:
Partial Public Class MainPage
Inherits PhoneApplicationPage
' Constructor
Private Dbas As WinPhoneData.WinPhoneData
Public Sub New()
InitializeComponent()
InitializeData()
End Sub
Sub InitializeData()
Me.Dbas = New WinPhoneData.WinPhoneData("Data Source=isostore:\GeoLocData.sdf")
If Not Dbas.DatabaseExists Then
Dbas.CreateDatabase()
End If
' Simular una nueva entrada a la tabla de localizacion
Dim c1 = New WinPhoneData.LocalizationData With {.Date = DateTime.Now, .Latitude = 10, .Longitude = 15, .Speed = 11}
Dim ls As New List(Of WinPhoneData.LocalizationData) From {c1}
Dbas.LocalizationDatas.InsertAllOnSubmit(ls)
Dbas.SubmitChanges()
End Sub
End Class
Espero que pequeño paso a paso os ayude a completar vuestra primera aplicación para Windows Phone y almacén SQL Ce en local. Si la descripción anterior no es suficiente, no dudéis en solicitármelo y puedo adjuntaros el documento en cuestión a titulo de Guía Rápida.
Saludos,
PepLluis,