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..
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:
Mutex
se usa la clase.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..
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.
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;
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..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 tableUsuarios 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.
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.
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.
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]");
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úblicaGetAllUsers () 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úblicagetUsers () 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 ();
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)) IQueryableentityQuery = 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)) IQueryableentityQuery = 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 ();
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)) IQueryableentityQuery = 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)) IQueryableentityQuery = 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.
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.