Trabajar con bases de datos locales en Windows Phone 8

En el artículo anterior, aprendió cómo almacenar datos en el almacenamiento aislado de su aplicación. En este artículo, nos centramos en trabajar con bases de datos locales que viven en el almacenamiento aislado de su aplicación. Aprenderá acerca de las operaciones de la base de datos utilizando LINQ, los esquemas de la base de datos y cómo obtener datos de una base de datos local..

1. Introducción

Puede almacenar datos relacionales en una base de datos localque vive en el almacenamiento aislado de su aplicación. Todas las operaciones de base de datos en Windows Phone se realizan utilizando LINQ to SQL. Se utiliza para definir el esquema de la base de datos, seleccionar datos y guardar cambios en el archivo de base de datos subyacente que reside en la carpeta local. 

El modelo de objetos LINQ to SQL usa el System.Data.Linq.DataContext espacio de nombres para hacer una llamada proxy a la base de datos local. El tiempo de ejecución de LINQ to SQL actúa como un puente entre el contexto de datos objeto y el datos reales hacer manipulaciones.

Cuando trabaje con bases de datos locales en Windows Phone, es importante tener en cuenta lo siguiente:

  • La base de datos local se ejecuta en el proceso de la aplicación de Windows Phone. No se ejecuta continuamente como un servicio en segundo plano..
  • Se puede acceder solo a través de la aplicación correspondiente de Windows Phone..
  • Se puede acceder solo con LINQ to SQL, Transact-SQL no es compatible.
  • Para sincronizar el acceso a la carpeta local a través de diferentes hilos, el Mutex se usa la clase.
  • No se recomienda cifrar el archivo de la base de datos de referencia si va a acceder a él exclusivamente desde la carpeta de instalación. Al hacerlo, evita que el sistema realice operaciones de mantenimiento de rutina de la base de datos, como la re-indexación, en la primera conexión.

Este artículo muestra cómo puede crear una base de datos local e insertar, actualizar o eliminar datos de ella. Construiremos una aplicación de ejemplo con un Detalles de usuario Tabla y realizar diversas operaciones en él. Separaremos los archivos de código para diferentes operaciones, como insertar, actualizar y eliminar por conveniencia.. 

2. Construyendo el contexto de datos

Las tablas para la base de datos se pueden definir en cualquier parte de la aplicación siempre que sea accesible a nivel global. Creamos un archivo separado., DB.cs, Para todas las mesas. En este archivo especificamos un modelo de objeto que determina la esquema de base de datos y crea el contexto de datos.

Paso 1: Agregando Referencias

Agregue las siguientes directivas en la parte superior de la DB.cs archivo para hacer referencia a LINQ al ensamblaje de SQL:

utilizando System.Data.Linq; utilizando System.Data.Linq.Mapping;

Paso 2: Creando una tabla

Añadir una clase de entidad llamada Detalles de usuario que representa la tabla de base de datos de la aplicación en la base de datos local. El atributo [Mesa] indica el tiempo de ejecución de LINQ to SQL para asignar la clase a una tabla de base de datos local.

[Table] clase pública Detalles del Usuario [Columna (IsDbGenerated = true, IsPrimaryKey = true)] ID pública int get; conjunto;  [Column] public string user_name get; conjunto;  [Column] public string user_email get; conjunto; 

Como puedes ver, la Detalles de usuario La clase tiene tres propiedades públicas que corresponden a tres columnas de la base de datos:

  • CARNÉ DE IDENTIDAD es una columna de identificador que se rellena automáticamente por la base de datos. También es la clave principal para la que se crea automáticamente un índice de base de datos. Esta configuración y más se especifican con el atributo de asignación de columna LINQ a SQL escrito sobre la sintaxis de la propiedad.
  • nombre de usuario Es una columna para almacenar el nombre del usuario..
  • correo_usuario Es una columna para almacenar la dirección de correo electrónico del usuario..

Paso 1: Definiendo el contexto de datos

La clase UserDataContext hereda de DataContext y se conoce como el contexto de datos. Este código llama al constructor base y declara la tabla de base de datos llamada Detalles de usuario. La base de datos local se almacena en el almacenamiento aislado de la aplicación y en nuestro ejemplo se guarda como Bases de datos.sdf

clase pública UserDataContext: DataContext cadena pública estática DBConnectionString = @ "isostore: /Databases.sdf"; public UserDataContext (string connectionString): base (connectionString)  public table Usuarios get return this.GetTable(); 

Tenga en cuenta que no es necesario que la cadena de conexión de la base de datos sea un campo estático. Usamos DBConnectionString en este caso solo por conveniencia.

3. Creando la base de datos

Para crear la base de datos, abra el código detrás del archivo de la aplicación, denominado App.xaml.cs. Agregue el siguiente código al final de su constructor, llamado Aplicación.

utilizando (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) if (! context.DatabaseExists ()) context.CreateDatabase (); 

El código de creación de la base de datos se agrega aquí para que la base de datos esté presente antes de que se ejecute el código de la página principal. El código verifica si la base de datos existe y, si no se encuentra ninguna, se crea una nueva.

4. Operaciones de base de datos

Una vez que se ha creado el contexto de datos y se ha creado la base de datos, podemos realizar operaciones en él. Puede insertar, actualizar y eliminar registros de la tabla que acabamos de crear. Hemos creado clases separadas para mantener funciones para las operaciones de inserción, eliminación y actualización.

Paso 1: Insertando Registros

Es conveniente crear un archivo de clase separado, DatabaseAdd.cs, para agregar cualquier registro a la base de datos. Definir una función Agregar usuario eso toma nombre y identificación de correo como parámetros y añade un registro a la Detalles de usuario mesa.

public void AddUser (nombre de la cadena, cadena de correo electrónico) using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) User_details du = new User_details (); du.user_name = nombre; du.user_email = correo electrónico; context.Users.InsertOnSubmit (du); context.SubmitChanges (); 

los Agregar usuario la función usa elUserDataContext contexto de datos para conectarse a la base de datos, crea una nueva instancia de Detalles de usuario clase de entidad, e inserta un registro.

Los nuevos elementos que se han agregado al contexto de datos no se guardan en la base de datos hasta que Presentar cambios se llama funcion Llama a Agregar usuario Función para agregar un registro a la base de datos..

DatabaseAdd add = new DatabaseAdd (); add.AddUser ("vivek", "[email protected]");

Paso 2: Obteniendo Registros

Crear un archivo de clase separado, FetchDatabase.cs, para recuperar registros de la base de datos. Esta clase contiene una GetAllUsers función que devuelve un IList instancia, que contiene los registros obtenidos de la tabla.

La conexión se configura utilizando el contexto de datos después del cual los registros se recuperan de la Detalles de usuario mesa. La consulta LINQ devuelve un IList instancia que contiene los registros recuperados. los IList La instancia no es más que una colección de objetos del mismo tipo..

IList pública GetAllUsers () IList list = null; using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryable consulta = de c en contexto. Los usuarios seleccionan c; list = query.ToList (); lista de retorno; 

En el siguiente fragmento de código definimos un Usuarios clase con miembros de datos carné de identidad, nombre, y correo electrónico para mantener los detalles de los registros buscados.

usuarios de la clase id de cadena pública get; conjunto;  nombre de cadena pública get; conjunto;  cadena pública de correo electrónico get; conjunto; 

Crear otra función, getAllUsers, que devuelve una lista de Usuarios cuando se llama. La función crea una nueva lista para contener los detalles de los usuarios buscados. Itera a través de la IList instancia nombrada usrs y agrega los detalles de cada usuario a la todos los usuarios ejemplo.

Lista pública getUsers () IList usrs = this.GetAllUsers (); Lista allUsers = nueva lista(); foreach (Detalles de usuario m en usuarios) Usuarios n = usuarios nuevos (); n.id = m.ID.ToString (); n.name = m.user_name; n.email = m.user_email; allUsers.Add (n);  devolver todos los usuarios; 

En la aplicación de ejemplo de este artículo, el getUsers función se utiliza para establecer el ItemSource del Cuadro de lista llamado todos los usuarios Como se muestra abajo.

FetchDatabase fetch = new FetchDatabase (); allusers.ItemsSource = fetch.getUsers ();

Paso 3: Actualización de registros

Actualizar registros es muy similar a agregar registros a una tabla. Continuando con nuestro enfoque modular, creamos un nuevo archivo de clase., DatabaseUpdate.cs, para actualizaciones de base de datos. A diferencia de las operaciones de eliminación, no hay ninguna función para actualizar varios registros a la vez.

Añadir una función ActualizarUsuarios que acepta un carné de identidad, nombre, y identificación de correo, y actualiza la fila de la tabla para el correspondiente carné de identidad.

Public void UpdateUser (int id, String email, String name) using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryable entityQuery = from c in context.Users donde c.ID == id select c; Detalles del usuario entityToUpdate = entityQuery.FirstOrDefault (); entityToUpdate.user_name = nombre; entityToUpdate.user_email = correo electrónico; context.SubmitChanges (); 

La función consulta la base de datos y almacena el primer registro coincidente en el entityToUpdate variable. A continuación, actualiza el registro asignando los nuevos valores y envía los cambios para actualizar la base de datos.

La base de datos no se actualiza hasta que llamamos al Presentar cambios función. Esta función solo actualizará el primer registro coincidente. los UpdateUser Se llama a la función para actualizar los registros existentes en la base de datos como se muestra a continuación..

DatabaseUpdate update = new DatabaseUpdate (); update.UpdateUser (1, "[email protected]", "vivek.maskara");

Para actualizar varios registros, deberá recorrer los registros que desea actualizar uno por uno. En el siguiente fragmento de código, actualizamos el nombre de cada uso en la base de datos haciéndolo en minúsculas.

using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryable entityQuery = from c in context.Users select c; IList entityToUpdate = entityQuery.ToList (); foreach (User_details user en entityToUpdate) user.user_name = user.user_name.ToLower ();  context.SubmitChanges (); 

Paso 4: Eliminar Registros

Crear un archivo de clase, DatabaseDelete.cs ,para borrar operaciones. En el Base de datos eliminada clase, agregue un Borrar usuario Función que acepta un parámetro. carné de identidad y elimina un solo usuario cuyo carné de identidad coincide con el parámetro pasado.

public void DeleteUser (String id) // eliminar usuario por id using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryable entityQuery = from c in context.Users donde c.ID.Equals (id) seleccionan c; Detalles del usuario entityToDelete = entityQuery.FirstOrDefault (); context.Users.DeleteOnSubmit (entityToDelete); context.SubmitChanges (); 

La función llama DeleteOnSubmit, que elimina un solo registro de la base de datos. Los cambios se guardan cuando el Presentar cambios se llama funcion los Borrar usuario La función elimina un solo registro de la base de datos como se muestra a continuación.

DatabaseDelete delete = new DatabaseDelete (); delete.DeleteUser ("1");

los System.Data.Linq montaje proporciona una función DeleteAllOnSubmit para eliminar varios registros a la vez. El siguiente fragmento de código trunca la Detalles de usuario mesa.

using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryable entityQuery = from c in context.Users select c; IList entityToDelete = entityQuery.ToList (); context.Users.DeleteAllOnSubmit (entityToDelete); context.SubmitChanges (); 

Esta función acepta una lista de registros y borra los registros en esa lista. Tenga en cuenta que en ambos casos los cambios se guardan solo cuando el Presentar cambios la función se llama.

Conclusión

Las aplicaciones de Windows Phone usan LINQ to SQL para todas las operaciones de base de datos. LINQ to SQL se utiliza para definir el esquema de la base de datos, seleccionar datos y guardar los cambios en el archivo de base de datos subyacente que se encuentra en el almacenamiento aislado de la aplicación. LINQ to SQL proporciona un enfoque orientado a objetos para trabajar con datos almacenados en una base de datos y consiste en un modelo de objetos y un tiempo de ejecución. Le recomiendo que lea este artículo de MSDN para conocer las mejores prácticas sobre el uso de bases de datos locales. Siéntase libre de descargar los archivos fuente del tutorial para usar como referencia.