Im vorherigen Artikel haben Sie erfahren, wie Sie Daten im isolierten Speicher Ihrer App speichern. In diesem Artikel konzentrieren wir uns auf die Arbeit mit lokalen Datenbanken, die sich im isolierten Speicher Ihrer App befinden. Sie lernen Datenbankvorgänge mit LINQ, Datenbankschemas sowie das Abrufen von Daten aus einer lokalen Datenbank.
Sie können relationale Daten in einer lokalen Datenbank speicherndas lebt im isolierten Speicher Ihrer App. Alle Datenbankvorgänge unter Windows Phone werden mit LINQ to SQL ausgeführt. Es wird verwendet, um das Datenbankschema zu definieren, Daten auszuwählen und Änderungen an der zugrunde liegenden Datenbankdatei zu speichern, die sich im lokalen Ordner befindet.
Das LINQ to SQL-Objektmodell verwendet die System.Data.Linq.DataContext
Namespace, um einen Proxy-Aufruf an die lokale Datenbank durchzuführen. Die LINQ to SQL-Laufzeit fungiert als Brücke zwischen der Datenkontext Objekt und die echte Daten Manipulationen durchführen.
Bei der Arbeit mit lokalen Datenbanken unter Windows Phone ist Folgendes zu beachten:
Mutex
Klasse wird verwendet.Dieser Artikel beschreibt, wie Sie eine lokale Datenbank erstellen und Daten einfügen, aktualisieren oder löschen können. Wir erstellen eine Beispielanwendung mit einem Nutzerdetails Tabelle und führen Sie verschiedene Operationen darauf aus. Wir werden die Codedateien für verschiedene Vorgänge wie Einfügen, Aktualisieren und Löschen der Einfachheit halber trennen.
Die Tabellen für die Datenbank können an beliebiger Stelle in der App definiert werden, sofern sie global verfügbar sind. Wir erstellen eine separate Datei, DB.cs, für alle tische. In dieser Datei geben wir ein Objektmodell an, das das bestimmt Datenbankschema und das erstellen Datenkontext.
Fügen Sie die folgenden Anweisungen oben in der Zeile hinzu DB.cs Datei zum Verweisen auf LINQ to SQL-Assembly:
using System.Data.Linq; using System.Data.Linq.Mapping;
Fügen Sie eine Entitätsklasse mit dem Namen hinzu Nutzerdetails
Dies stellt die Datenbanktabelle der App in der lokalen Datenbank dar. Das Attribut [Tabelle]
Gibt die LINQ to SQL-Laufzeit an, um die Klasse einer lokalen Datenbanktabelle zuzuordnen.
[Table] public class User_details [Spalte (IsDbGenerated = true, IsPrimaryKey = true)] public int ID get; einstellen; [Column] öffentliche Zeichenfolge Benutzername get; einstellen; [Column] öffentliche Zeichenfolge user_email get; einstellen;
Wie Sie sehen können, die Nutzerdetails
Klasse hat drei öffentliche Eigenschaften, die drei Datenbankspalten entsprechen:
ICH WÜRDE
ist eine Bezeichnerspalte, die automatisch von der Datenbank aufgefüllt wird. Dies ist auch der Primärschlüssel, für den automatisch ein Datenbankindex erstellt wird. Diese und weitere Einstellungen werden mit dem Spaltenzuordnungsattribut LINQ to SQL angegeben, das über der Eigenschaftssyntax steht.Nutzername
ist eine Spalte, in der der Name des Benutzers gespeichert wird.Benutzer Email
ist eine Spalte zum Speichern der E-Mail-Adresse des Benutzers.Die Klasse UserDataContext
erbt von DataContext
und wird als das bezeichnet Datenkontext. Dieser Code ruft den Basiskonstruktor auf und deklariert die benannte Datenbanktabelle Nutzerdetails
. Die lokale Datenbank wird im isolierten Speicher der App gespeichert und in unserem Beispiel als gespeichert Datenbanken.sdf
.
öffentliche Klasse UserDataContext: DataContext öffentliche statische Zeichenfolge DBConnectionString = @ "isostore: /Databases.sdf"; public UserDataContext (Zeichenfolge connectionString): base (connectionString) public TableBenutzer get return this.GetTable ();
Beachten Sie, dass die Datenbankverbindungszeichenfolge kein statisches Feld sein muss. Wir gebrauchen DBConnectionString
in diesem Fall nur der Bequemlichkeit halber.
Um die Datenbank zu erstellen, öffnen Sie den Code hinter der Datei der App mit dem Namen App.xaml.cs. Fügen Sie den folgenden Code mit dem Namen am Ende seines Konstruktors hinzu App
.
using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) if (! context.DatabaseExists ()) context.CreateDatabase ();
Der Datenbankerstellungscode wird hier hinzugefügt, damit die Datenbank vorhanden ist, bevor der Code von der Hauptseite ausgeführt wird. Der Code prüft, ob die Datenbank existiert, und wenn keine Datenbank gefunden wird, wird eine neue erstellt.
Sobald der Datenkontext erstellt und die Datenbank erstellt wurde, können wir Vorgänge darauf ausführen. Sie können Datensätze aus der soeben erstellten Tabelle einfügen, aktualisieren und löschen. Wir haben separate Klassen für die Funktionen zum Einfügen, Löschen und Aktualisieren erstellt.
Es ist praktisch, eine separate Klassendatei zu erstellen, DatabaseAdd.cs, zum Hinzufügen von Datensätzen zur Datenbank. Funktion definieren Nutzer hinzufügen
das macht Name
und email_id
als Parameter und fügt einen Datensatz hinzu Nutzerdetails
Tabelle.
public void AddUser (String-Name, String-E-Mail) 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 ();
Das Nutzer hinzufügen
Funktion verwendet dieUserDataContext
Datenkontext für die Verbindung zur Datenbank erstellt eine neue Instanz von Nutzerdetails
Entitätsklasse und fügt einen Datensatz ein.
Neue Elemente, die dem Datenkontext hinzugefügt wurden, werden erst in der Datenbank gespeichert SubmitChanges
Funktion wird aufgerufen. Ruf den Nutzer hinzufügen
Funktion, um einen Datensatz zur Datenbank hinzuzufügen.
DatabaseAdd add = new DatabaseAdd (); add.AddUser ("vivek", "[email protected]");
Erstellen Sie eine separate Klassendatei, FetchDatabase.cs, zum Abrufen von Datensätzen aus der Datenbank. Diese Klasse enthält eine GetAllUsers
Funktion, die ein zurückgibt IList
Instanz, die die aus der Tabelle abgerufenen Datensätze enthält.
Die Verbindung wird mit dem Datenkontext eingerichtet, nach dem Datensätze aus dem Server abgerufen werden Nutzerdetails
Tabelle. Die LINQ-Abfrage gibt ein IList
Instanz, die die abgerufenen Datensätze enthält. Das IList
Instanz ist nichts weiter als eine Sammlung von Objekten desselben Typs.
öffentliche IListGetAllUsers () IList list = null; using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryable Abfrage = aus c im Kontext. Benutzer wählen c aus; list = query.ToList (); Rückkehrliste;
In dem folgenden Codeausschnitt definieren wir a Benutzer
Klasse mit Datenmitgliedern Ich würde
, Name
, und Email
die Details aus den abgerufenen Datensätzen enthalten.
Klasse Benutzer öffentliche String-ID get; einstellen; öffentlicher String-Name get; einstellen; öffentliche String-E-Mail get; einstellen;
Erstellen Sie eine weitere Funktion, getAllUsers
, das gibt eine Liste von zurück Benutzer
wenn gerufen Die Funktion erstellt eine neue Liste mit den Details der abgerufenen Benutzer. Es iteriert durch die IList
Instanz benannt usrs
und fügt die Details jedes Benutzers zum hinzu Alle Nutzer
Beispiel.
öffentliche ListegetUsers () IList usrs = this.GetAllUsers (); Liste allUsers = neue Liste (); foreach (User_details m in usrs) Benutzer n = neue Benutzer (); n.id = m.ID.ToString (); n.name = m.benutzername; n.email = m.user_email; allUsers.Add (n); allUsers zurückgeben;
In der Beispielanwendung dieses Artikels wird der getUsers
Funktion wird verwendet, um das einzustellen ItemSource
des Listbox
genannt Alle Nutzer
Wie nachfolgend dargestellt.
FetchDatabase fetch = neue FetchDatabase (); allusers.ItemsSource = fetch.getUsers ();
Das Aktualisieren von Datensätzen ähnelt dem Hinzufügen von Datensätzen zu einer Tabelle. Um unseren modularen Ansatz fortzusetzen, erstellen wir eine neue Klassendatei, DatabaseUpdate.cs, für Datenbankaktualisierungen. Im Gegensatz zu Löschvorgängen gibt es keine Funktion, um mehrere Datensätze gleichzeitig zu aktualisieren.
Funktion hinzufügen UpdateUsers
das akzeptiert ein Ich würde
, Name
, und email_id
, und aktualisiert die Tabellenzeile für die entsprechende Ich würde
.
public void UpdateUser (int id, String-E-Mail, Stringname) using (UserDataContext-Kontext = neuer UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = from c in context.Users mit c.ID == id select c; Benutzerdaten entityToUpdate = entityQuery.FirstOrDefault (); entityToUpdate.user_name = name; entityToUpdate.user_email = E-Mail; context.SubmitChanges ();
Die Funktion fragt die Datenbank ab und speichert den ersten übereinstimmenden Datensatz in der Datenbank entityToUpdate
Variable. Anschließend wird der Datensatz aktualisiert, indem die neuen Werte zugewiesen werden, und die Änderungen werden zur Aktualisierung der Datenbank übermittelt.
Die Datenbank wird erst aktualisiert, wenn wir das aufrufen SubmitChanges
Funktion. Diese Funktion aktualisiert nur den ersten übereinstimmenden Datensatz. Das UpdateUser
Die Funktion wird aufgerufen, um vorhandene Datensätze in der Datenbank zu aktualisieren (siehe unten).
DatabaseUpdate-Update = neues DatabaseUpdate (); update.UpdateUser (1, "[email protected]", "vivek.maskara");
Um mehrere Datensätze zu aktualisieren, müssen Sie die Datensätze, die Sie aktualisieren möchten, nacheinander durchlaufen. Im folgenden Code-Snippet aktualisieren wir den Namen jeder Verwendung in der Datenbank, indem sie in Kleinbuchstaben geschrieben wird.
using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = from c in context.Users select c; IList entityToUpdate = entityQuery.ToList (); foreach (user_details Benutzer in entityToUpdate) user.user_name = user.user_name.ToLower (); context.SubmitChanges ();
Erstellen Sie eine Klassendatei, DatabaseDelete.cs ,für Löschvorgänge. In dem DatabaseDelete
Klasse, fügen Sie ein Benutzer löschen
Funktion, die einen Parameter akzeptiert Ich würde
und löscht einen einzelnen Benutzer, dessen Ich würde
stimmt mit dem übergebenen Parameter überein.
public void DeleteUser (String-ID) // Benutzer nach ID löschen using (UserDataContext context = new UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = from c im Kontext. Benutzer, bei denen c.ID.Equals (id) c auswählt; User_details entityToDelete = entityQuery.FirstOrDefault (); context.Users.DeleteOnSubmit (entityToDelete); context.SubmitChanges ();
Die Funktion ruft auf DeleteOnSubmit
, Dadurch wird ein einzelner Datensatz aus der Datenbank gelöscht. Die Änderungen werden gespeichert, wenn die SubmitChanges
Funktion wird aufgerufen. Das Benutzer löschen
Die Funktion löscht einen einzelnen Datensatz aus der Datenbank (siehe unten).
DatabaseDelete delete = neue DatabaseDelete (); delete.DeleteUser ("1");
Das System.Data.Linq
Baugruppe bietet eine Funktion DeleteAllOnSubmit
mehrere Datensätze gleichzeitig löschen. Das folgende Code-Snippet schneidet die Nutzerdetails
Tabelle.
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 ();
Diese Funktion akzeptiert eine Liste von Datensätzen und löscht die Datensätze in dieser Liste. Beachten Sie, dass in beiden Fällen die Änderungen nur gespeichert werden, wenn die SubmitChanges
Funktion wird aufgerufen.
Windows Phone-Apps verwenden LINQ to SQL für alle Datenbankvorgänge. LINQ to SQL wird verwendet, um das Datenbankschema zu definieren, Daten auszuwählen und Änderungen an der zugrunde liegenden Datenbankdatei zu speichern, die sich im isolierten Speicher der App befindet. LINQ to SQL bietet einen objektorientierten Ansatz für das Arbeiten mit in einer Datenbank gespeicherten Daten und besteht aus einem Objektmodell und einer Laufzeitumgebung. Ich empfehle Ihnen, diesen MSDN-Artikel mit Best Practices für die Verwendung lokaler Datenbanken zu lesen. Fühlen Sie sich frei, die Quelldateien des Tutorials als Referenz herunterzuladen.