Working med lokale databaser på Windows Phone 8
28
Del
6
Del
Dette Cyber Monday Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
I forrige artikkel, lærte du hvordan du lagrer data i appens isolert lagring. I denne artikkelen fokuserer vi på å jobbe med lokale databaser som lever i appens isolert lagring. Du vil lære om databaseoperasjoner ved hjelp av LINQ, databaseskjemaer samt hvordan å hente data fra en lokal database.
1. Innledning
Du kan lagre relasjonsdata i en lokal database Hotell som bor i appens isolert lagring. Alle database operasjoner på Windows Phone er utført ved hjelp av LINQ til SQL. Den brukes til å definere databaseskjema, velger data, og lagre endringer i den underliggende databasefilen bosatt i den lokale mappen. LINQ til SQL objektmodellen bruker System.Data.Linq.DataContext navne å lage en proxy kall til den lokale databasen. De LINQ til SQL runtime fungerer som en bro mellom data sammenheng objektet og de reelle data å gjøre manipulasjoner Når du arbeider med lokale databaser på Windows Phone, er det viktig å ha følgende i bakhodet:. Denne artikkelen viser hvordan du kan lage en lokal database og sette inn, oppdatere eller slette data fra den. Vi vil bygge et eksempel program med en Bruker Data Tabellene for databasen kan defineres hvor som helst i programmet, så lenge det er tilgjengelig globalt. Vi skaper en egen fil, DB.cs, for alle tabellene. I denne filen spesifiserer vi en objektmodell som bestemmer databaseskjema og opprette datasammenheng Legg til følgende direktiver på toppen av DB. cs fil å referere LINQ til SQL montering: Legg til en enhet klasse kalt User_details at representerer databasen tabellen av programmet i den lokale databasen. . Attributtet [tabell] indikerer LINQ til SQL runtime å kartlegge klassen til en lokal database tabell product: [Tabell] offentlig klasse User_details {[Column (IsDbGenerated = sant, IsPrimaryKey = true)] public int ID {får; sett; } [Kolonne] offentlig string brukernavn {får; sett; } [Kolonne] offentlig streng user_email {får; sett; }} Som du kan se, User_details klasse har tre offentlige eiendommer som tilsvarer tre databasekolonner: Klassen UserDataContext arver fra Context og er referert til som datasammenheng. Denne koden kaller basen konstruktør og erklærer databasen tabellen heter User_details. Den lokale databasen er lagret i app isolert lagring og i vårt eksempel er det lagret som Databases.sdf. Merk at databasen tilkoblingsstrengen ikke er nødvendig for å være en statisk felt. Vi bruker DBConnectionString i dette tilfellet bare for enkelhets skyld. For å opprette databasen, åpne kode bak fil av programmet, heter App.xaml.cs. Legg til følgende kode på slutten av sin konstruktør, oppkalt App Databasen opprettelse koden er lagt her, slik at databasen vil være til stede før koden fra hovedsiden går. Koden sjekker om eksisterer i databasen, og hvis ingen database blir funnet, blir en ny opprettes. Når dataene sammenheng har blitt bygget og databasen er opprettet, kan vi utføre operasjoner på det. Du kan sette inn, oppdatere og slette poster fra tabellen vi nettopp opprettet. Vi har opprettet egne klasser for å holde funksjoner for sette inn, slette og oppdatere operasjoner Det er praktisk å opprette en egen klasse fil, DatabaseAdd.cs, for å legge noe poster til databasen. Definere en funksjon adduser som tar navnet og email_id som parametre og legger en post til User_details bordet. adduser funksjonen bruker theUserDataContext data kontekst for å koble til databasen, oppretter en ny forekomst av User_details enhet klassen, og setter inn en post. Nye elementer som har blitt lagt til datasammenheng er ikke lagres i databasen til SubmitChanges funksjonen kalles. Ring adduser funksjon for å legge til en post i databasen Opprett en egen klasse fil, FetchDatabase.cs, for å hente poster fra databasen. Denne klassen inneholder en GetAllUsers funksjon som returnerer en IList eksempel, inneholder postene hentet fra bordet. Tilkoblingen er satt opp ved hjelp av datasammenheng etter som poster er hentet fra User_details tabellen. Den LINQ spørringen returnerer en IList eksempel inneholder de hentet poster. Den IList eksempel er noe mer enn en samling av gjenstander av samme type I under kodebiten definerer vi en Brukere klasse med data medlemmer id, navn og e-post for å holde detaljene fra de hentet postene Opprett en annen funksjon, getAllUsers, som returnerer en liste over brukere når kalt. Funksjonen oppretter en ny liste for å holde detaljer om hentet brukere. Det gjentas gjennom IList eksempel heter usrs og legger til detaljene for hver bruker til ALLUSERS eksempel I prøven anvendelsen av denne artikkelen, getUsers funksjonen brukes til å angi ItemSource av listeboksen heter allusers som vist nedenfor Oppdatering poster er svært lik legge poster i en tabell. Fortsetter med vår modulær tilnærming skaper vi en ny klasse fil, DatabaseUpdate.cs, for databaseoppdateringer. I motsetning til sletteoperasjonene, er det ingen funksjon for å oppdatere flere poster på en gang. legge til en funksjon UpdateUsers som godtar en id, navn, og email_id, og oppdaterer raden tabellen for tilsvarende id. Funksjonen spør databasen og lagrer den første matchet posten i entityToUpdate variabel. Den oppdaterer deretter rekorden ved å tildele de nye verdiene og sender endringer for å oppdatere databasen. Databasen oppdateres ikke før vi kaller SubmitChanges funksjonen. Denne funksjonen vil oppdatere bare første matchet posten. Den UpdateUser funksjonen kalles å oppdatere eksisterende poster i databasen som vist nedenfor For å oppdatere flere poster, må du iterere gjennom postene som du ønsker å oppdatere én etter én. I det følgende kodebiten, vi oppdaterer navnet på hvert bruk i databasen ved å gjøre det små bokstaver Lag en klasse fil, DatabaseDelete.cs, for sletteoperasjonene. I DatabaseDelete klassen, legge en DeleteUser funksjon som aksepterer en parameter id og sletter en enkelt bruker som id matcher gått inn parameter. Funksjonen kaller DeleteOnSubmit, som sletter en enkelt post fra databasen. Endringene blir lagret når SubmitChanges funksjonen kalles. Den DeleteUser funksjonen sletter en enkelt post fra databasen som vist nedenfor System.Data.Linq montering gir en funksjon DeleteAllOnSubmit å slette flere poster på en gang. Følgende kodebit avkorter User_details tabellen Denne funksjonen tar en liste med poster og sletter postene i denne listen. Merk at i begge tilfeller lagres endringene kun når SubmitChanges funksjonen kalles. Windows Phone-apps bruke LINQ til SQL for alle databaseoperasjoner. LINQ til SQL brukes til å definere databaseskjemaet, velger data, og lagre endringer i den underliggende databasefilen bosatt i appens isolert lagring. LINQ til SQL gir et objekt-orientert tilnærming for å arbeide med data lagret i en database, og består av en objektmodell og en runtime. Jeg anbefaler at du leser denne MSDN-artikkelen for beste praksis for bruk av lokale databaser. Føl deg fri til å laste ned opplæringen er kildefilene til å bruke som referanse.
< .no>
Kjører lokal database i Windows Phone app prosess. Det kjøres ikke kontinuerlig som en bakgrunnstjeneste.
Hvis du vil synkron tilgang til lokal mappe på tvers av forskjellige tråder, er Mutex klassen brukes.
Det er ikke anbefalt å kryptere referansen databasefilen hvis du skal for å få tilgang til det utelukkende fra installasjonsmappen. Gjør hindrer slik at systemet fra å utføre rutinemessig vedlikehold operasjoner, for eksempel re-indeksering, på den første tilkoblingen.
bord og utføre ulike operasjoner på den. Vi vil skille kodefiler for ulike operasjoner som sette inn, oppdatere og slette for letthets skyld.
2. Bygge Data Context
Trinn 1:. Legge referanser
bruker System.Data.Linq, bruker System.Data.Linq.Mapping;
Trinn 2: Opprette en tabell
ID er en identifikator kolonne blir automatisk befolket av databasen. Det er også primærnøkkelen som en database indeksen opprettes automatisk. Disse innstillingene og flere er spesifisert med LINQ til SQL kolonne kartlegging attributt skrevet ovenfor eiendommen syntaks.
Trinn 1:. Definere data Context
public class UserDataContext: Context {public static string DBConnectionString = @ "isostore: /Databases.sdf"; offentlig UserDataContext (string Connection): base (Connection) {} public Table < User_details > Brukere {får {return this.GetTable < User_details > (); }}}
3. Opprette Database
bruker (UserDataContext sammenheng = new UserDataContext (UserDataContext.DBConnectionString)) {if context.CreateDatabase () (context.DatabaseExists (!));}.
4. Database Operations
Trinn 1:. Sette Records
Public void adduser (String navn, String e) {bruker (UserDataContext sammenheng = new UserDataContext (UserDataContext.DBConnectionString)) {User_details du = nye User_details (); du.user_name = navn; du.user_email = e-post; context.Users.InsertOnSubmit (du); context.SubmitChanges (); }}
DatabaseAdd legge = new DatabaseAdd (); add.AddUser ("Vivek", "[email protected]");
Trinn 2:. Henter Records
offentlig IList. ≪ User_details > GetAllUsers () {IList < User_details > list = null; bruker (UserDataContext sammenheng = new UserDataContext (UserDataContext.DBConnectionString)) {IQueryable < User_details > query = fra ci context.Users velger c; list = query.ToList (); } Avkastning liste;}
klasse Brukere {offentlig string id {få.; sett; } Public string name {får; sett; } Public string epost {får; sett; }}
offentlig List <. Brukere > getUsers () {IList < User_details > usrs = this.GetAllUsers (); List < Brukere > ALLUSERS = new List < Brukere > (); foreach (User_details m i usrs) {Brukere n = nye brukere (); n.id = m.ID.ToString (); n.name = m.user_name; n.email = m.user_email; allUsers.Add (n); } Returnere ALLUSERS;}
FetchDatabase hente = new FetchDatabase ();. Allusers.ItemsSource = hente .getUsers ();
Trinn 3: Oppdatere Records
Public void UpdateUser (int id, String epost, String navn) {bruker (UserDataContext sammenheng = new UserDataContext (UserDataContext.DBConnectionString)) {IQueryable < User_details > entityQuery = fra ci context.Users hvor c.ID == id velge c; User_details entityToUpdate = entityQuery.FirstOrDefault (); entityToUpdate.user_name = navn; entityToUpdate.user_email = e-post; context.SubmitChanges (); }}
DatabaseUpdate oppdatering = new DatabaseUpdate ();. Update.UpdateUser (1, "[email protected]", "vivek.maskara");
bruker (UserDataContext sammenheng = new UserDataContext (UserDataContext.DBConnectionString)) {IQueryable. ≪ User_details > entityQuery = fra ci context.Users velger C; IList < User_details > entityToUpdate = entityQuery.ToList (); foreach (User_details bruker i entityToUpdate) {user.user_name = user.user_name.ToLower (); } Context.SubmitChanges ();}
Trinn 4: Slette Records
Public void DeleteUser (String id) //slette brukeren ved id {bruker (UserDataContext sammenheng = ny UserDataContext (UserDataContext.DBConnectionString)) {IQueryable < User_details > entityQuery = fra ci context.Users hvor c.ID.Equals (id) velg c; User_details entityToDelete = entityQuery.FirstOrDefault (); context.Users.DeleteOnSubmit (entityToDelete); context.SubmitChanges (); }}
DatabaseDelete slette = new DatabaseDelete ();. Delete.DeleteUser ("1");
bruker (UserDataContext sammenheng = new UserDataContext (UserDataContext.DBConnectionString)) {IQueryable. ≪ User_details > entityQuery = fra ci context.Users velger C; IList < User_details > entityToDelete = entityQuery.ToList (); context.Users.DeleteAllOnSubmit (entityToDelete); context.SubmitChanges ();}
Konklusjon