Dans l'article précédent, vous avez appris à stocker des données dans le stockage isolé de votre application. Dans cet article, nous nous concentrons sur l'utilisation de bases de données locales qui résident dans le stockage isolé de votre application. Vous en apprendrez davantage sur les opérations de base de données à l'aide de LINQ, les schémas de base de données, ainsi que sur la procédure d'extraction des données d'une base de données locale..
Vous pouvez stocker des données relationnelles dans une base de données localequi vit dans le stockage isolé de votre application. Toutes les opérations de base de données sur Windows Phone sont effectuées à l'aide de LINQ to SQL. Il est utilisé pour définir le schéma de base de données, sélectionner des données et enregistrer les modifications apportées au fichier de base de données sous-jacent résidant dans le dossier local..
Le modèle objet LINQ to SQL utilise le System.Data.Linq.DataContext
namespace pour faire un appel proxy à la base de données locale. Le runtime LINQ to SQL agit comme un pont entre le contexte de données objet et le données réelles faire des manipulations.
Lorsque vous travaillez avec des bases de données locales sur Windows Phone, il est important de garder à l'esprit les points suivants:
Mutex
la classe est utilisée.Cet article explique comment créer une base de données locale et y insérer, mettre à jour ou supprimer des données. Nous allons construire un exemple d’application avec un Détails de l'utilisateur table et effectuer diverses opérations dessus. Nous allons séparer les fichiers de code pour différentes opérations telles que insérer, mettre à jour et supprimer pour des raisons de commodité..
Les tables de la base de données peuvent être définies n’importe où dans l’application, à condition qu’elles soient accessibles globalement. Nous créons un fichier séparé, DB.cs, pour toutes les tables. Dans ce fichier, nous spécifions un modèle d'objet qui détermine la schéma de base de données et créer le contexte de données.
Ajoutez les directives suivantes en haut de la DB.cs fichier pour référencer l'assemblage LINQ to SQL:
using System.Data.Linq; using System.Data.Linq.Mapping;
Ajouter une classe d'entité nommée Détails utilisateur
qui représente la table de base de données de l'application dans la base de données locale. L'attribut [Table]
indique le runtime LINQ to SQL pour mapper la classe sur une table de base de données locale.
[Table] public class User_details [[Column (IsDbGenerated = true, IsPrimaryKey = true)] public int ID get; ensemble; [Colonne] chaîne publique nom_utilisateur get; ensemble; [Column] public string user_email get; ensemble;
Comme vous pouvez le voir, le Détails utilisateur
La classe a trois propriétés publiques qui correspondent à trois colonnes de la base de données:
ID
est une colonne d'identifiant qui est automatiquement renseignée par la base de données. C'est également la clé primaire pour laquelle un index de base de données est créé automatiquement. Ces paramètres et plus encore sont spécifiés avec l'attribut de mappage de colonne LINQ to SQL écrit au-dessus de la syntaxe de la propriété..Nom d'utilisateur
est une colonne pour stocker le nom de l'utilisateur.utilisateur_email
est une colonne pour stocker l'adresse email de l'utilisateur.La classe UserDataContext
hérite de DataContext
et est appelé le contexte de données. Ce code appelle le constructeur de base et déclare la table de base de données nommée Détails utilisateur
. La base de données locale est stockée dans la mémoire de stockage isolée de l'application. Dans notre exemple, elle est enregistrée sous le nom Bases de données.sdf
.
Classe publique UserDataContext: DataContext chaîne statique publique DBConnectionString = @ "isostore: /Databases.sdf"; public UserDataContext (string connectionString): base (connectionString) table publiqueLes utilisateurs get return this.GetTable ();
Notez qu'il n'est pas nécessaire que la chaîne de connexion à la base de données soit un champ statique. Nous utilisons DBConnectionString
dans ce cas juste pour plus de commodité.
Pour créer la base de données, ouvrez le fichier de code derrière l'application, nommé App.xaml.cs. Ajoutez le code suivant à la fin de son constructeur, nommé App
.
using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) if (! context.DatabaseExists ()) context.CreateDatabase ();
Le code de création de base de données est ajouté ici pour que la base de données soit présente avant l'exécution du code de la page principale. Le code vérifie si la base de données existe et, si aucune base de données n'est trouvée, une nouvelle est créée.
Une fois le contexte de données créé et la base de données créée, nous pouvons effectuer des opérations dessus. Vous pouvez insérer, mettre à jour et supprimer des enregistrements de la table que nous venons de créer. Nous avons créé des classes séparées pour contenir des fonctions pour les opérations d'insertion, de suppression et de mise à jour..
C'est pratique de créer un fichier de classe séparé, DatabaseAdd.cs, pour ajouter des enregistrements à la base de données. Définir une fonction AddUser
qui prend prénom
et email_id
en tant que paramètres et ajoute un enregistrement à la Détails utilisateur
table.
public void AddUser (Nom de chaîne, Adresse électronique de chaîne) using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) User_details du = new User_details (); du.user_name = name; du.user_email = email; context.Users.InsertOnSubmit (du); context.SubmitChanges ();
le AddUser
la fonction utilise leUserDataContext
contexte de données pour se connecter à la base de données, crée une nouvelle instance du Détails utilisateur
classe d'entité et insère un enregistrement.
Les nouveaux éléments ajoutés au contexte de données ne sont pas enregistrés dans la base de données tant que la Soumettre des changements
la fonction est appelée. Appeler le AddUser
fonction pour ajouter un enregistrement à la base de données.
DatabaseAdd add = new DatabaseAdd (); add.AddUser ("vivek", "[email protected]");
Créer un fichier de classe séparé, FetchDatabase.cs, pour récupérer des enregistrements de la base de données. Cette classe contient un GetAllUsers
fonction qui retourne un IListe
exemple, contenant les enregistrements extraits de la table.
La connexion est établie à l’aide du contexte de données après lequel les enregistrements sont extraits de la Détails utilisateur
table. La requête LINQ renvoie un IListe
instance contenant les enregistrements récupérés. le IListe
l'instance n'est rien de plus qu'une collection d'objets du même type.
publicisteGetAllUsers () IList list = null; using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryable query = de c dans le contexte.Les utilisateurs sélectionnent c; list = query.ToList (); liste de retour;
Dans l’extrait de code ci-dessous, nous définissons un Utilisateurs
classe avec des membres de données identifiant
, prénom
, et email
pour conserver les détails des enregistrements récupérés.
utilisateurs de classe public string id get; ensemble; nom de chaîne publique get; ensemble; chaîne publique email get; ensemble;
Créer une autre fonction, getAllUsers
, qui retourne une liste de Utilisateurs
quand appelé. La fonction crée une nouvelle liste pour contenir les détails des utilisateurs récupérés. Il itère à travers le IListe
instance nommée usrs
et ajoute les détails de chaque utilisateur au tous les utilisateurs
exemple.
liste publiquegetUsers () IList usrs = this.GetAllUsers (); liste allUsers = nouvelle liste (); foreach (User_details m in usrs) Utilisateurs n = nouveaux utilisateurs (); n.id = m.ID.ToString (); n.name = m.user_name; n.email = m.user_email; allUsers.Add (n); return allUsers;
Dans l'exemple d'application de cet article, le getUtilisateurs
fonction est utilisée pour définir la ItemSource
du Zone de liste
nommé tous les utilisateurs
comme indiqué ci-dessous.
FetchDatabase fetch = new FetchDatabase (); allusers.ItemsSource = fetch.getUsers ();
La mise à jour des enregistrements est très similaire à l'ajout d'enregistrements à une table. Poursuivant notre approche modulaire, nous créons un nouveau fichier de classe., DatabaseUpdate.cs, pour les mises à jour de la base de données. Contrairement aux opérations de suppression, aucune fonction ne permet de mettre à jour plusieurs enregistrements à la fois..
Ajouter une fonction UpdateUsers
qui accepte un identifiant
, prénom
, et email_id
, et met à jour la ligne de la table pour le correspondant identifiant
.
public void UpdateUser (int id, Chaîne email, Nom chaîne) utilisant (UserDataContext contexte = new UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = from c in context.Users où c.ID == id sélectionne c; User_details entityToUpdate = entityQuery.FirstOrDefault (); entityToUpdate.user_name = nom; entityToUpdate.user_email = email; context.SubmitChanges ();
La fonction interroge la base de données et stocke le premier enregistrement correspondant dans la entité à mettre à jour
variable. Il met ensuite à jour l'enregistrement en attribuant les nouvelles valeurs et soumet les modifications pour mettre à jour la base de données..
La base de données n’est mise à jour que lorsque nous appelons le Soumettre des changements
une fonction. Cette fonction ne mettra à jour que le premier enregistrement correspondant. le UpdateUser
la fonction est appelée pour mettre à jour les enregistrements existants dans la base de données, comme indiqué ci-dessous.
DatabaseUpdate update = new DatabaseUpdate (); update.UpdateUser (1, "[email protected]", "vivek.maskara");
Pour mettre à jour plusieurs enregistrements, vous devez parcourir les enregistrements que vous souhaitez mettre à jour un par un. Dans l'extrait de code suivant, nous mettons à jour le nom de chaque utilisation de la base de données en le mettant en minuscule..
using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = à partir de c dans le contexte.Les utilisateurs sélectionnent c; IListe entityToUpdate = entityQuery.ToList (); foreach (User_details utilisateur dans entityToUpdate) user.name_user = user.name_user.ToLower (); context.SubmitChanges ();
Créer un fichier de classe, DatabaseDelete.cs ,pour les opérations de suppression. dans le DatabaseDelete
classe, ajouter un Supprimer l'utilisateur
fonction qui accepte un paramètre identifiant
et supprime un utilisateur unique dont identifiant
correspond au paramètre transmis.
public void DeleteUser (String id) // delete user by id using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString))) IQueryableentityQuery = from c in context.Users où c.ID.Equals (id), sélectionnez c; User_details entityToDelete = entityQuery.FirstOrDefault (); context.Users.DeleteOnSubmit (entityToDelete); context.SubmitChanges ();
Les appels de fonction DeleteOnSubmit
, qui supprime un seul enregistrement de la base de données. Les modifications sont enregistrées lorsque le Soumettre des changements
la fonction est appelée. le Supprimer l'utilisateur
fonction supprime un seul enregistrement de la base de données, comme indiqué ci-dessous.
DatabaseDelete delete = new DatabaseDelete (); delete.DeleteUser ("1");
le System.Data.Linq
l'assemblage fournit une fonction DeleteAllOnSubmit
supprimer plusieurs enregistrements à la fois. L’extrait de code suivant tronque la Détails utilisateur
table.
using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = à partir de c dans le contexte.Les utilisateurs sélectionnent c; IListe entityToDelete = entityQuery.ToList (); context.Users.DeleteAllOnSubmit (entityToDelete); context.SubmitChanges ();
Cette fonction accepte une liste d'enregistrements et supprime les enregistrements de cette liste. Notez que dans les deux cas, les modifications ne sont enregistrées que lorsque Soumettre des changements
la fonction s'appelle.
Les applications Windows Phone utilisent LINQ to SQL pour toutes les opérations de base de données. LINQ to SQL est utilisé pour définir le schéma de base de données, sélectionner des données et enregistrer les modifications apportées au fichier de base de données sous-jacent résidant dans la mémoire de stockage isolée de l'application. LINQ to SQL fournit une approche orientée objet pour travailler avec des données stockées dans une base de données et consiste en un modèle objet et un environnement d'exécution. Je vous recommande de lire cet article MSDN pour connaître les meilleures pratiques d'utilisation des bases de données locales. N'hésitez pas à télécharger les fichiers sources du didacticiel à utiliser comme référence.