Arbeide med lokale databaser på Windows Phone 8

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:.
< .no>
Kjører lokal database i Windows Phone app prosess. Det kjøres ikke kontinuerlig som en bakgrunnstjeneste.

  • Det kan bare nås ved den tilsvarende Windows Phone app.
  • Det kan nås bare med LINQ til SQL, Transact-SQL støttes ikke.

    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.

    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
    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

    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

    Trinn 1:. Legge referanser

    Legg til følgende direktiver på toppen av DB. cs fil å referere LINQ til SQL montering:
    bruker System.Data.Linq, bruker System.Data.Linq.Mapping;
    Trinn 2: Opprette en tabell

    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:

    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.

  • brukernavn er en kolonne for å lagre navnet til brukeren.
  • user_email er en kolonne for å lagre e-postadressen til brukeren

    Trinn 1:. Definere data Context

    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.
    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 > (); }}}

    Merk at databasen tilkoblingsstrengen ikke er nødvendig for å være en statisk felt. Vi bruker DBConnectionString i dette tilfellet bare for enkelhets skyld.

    3. Opprette Database

    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
    bruker (UserDataContext sammenheng = new UserDataContext (UserDataContext.DBConnectionString)) {if context.CreateDatabase () (context.DatabaseExists (!));}.

    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.

    4. Database Operations

    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

    Trinn 1:. Sette Records

    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.
    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 (); }}

    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
    DatabaseAdd legge = new DatabaseAdd (); add.AddUser ("Vivek", "[email protected]");
    Trinn 2:. Henter Records

    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
    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;}

    I under kodebiten definerer vi en Brukere klasse med data medlemmer id, navn og e-post for å holde detaljene fra de hentet postene
    klasse Brukere {offentlig string id {få.; sett; } Public string name {får; sett; } Public string epost {får; sett; }}

    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
    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;}

    I prøven anvendelsen av denne artikkelen, getUsers funksjonen brukes til å angi ItemSource av listeboksen heter allusers som vist nedenfor
    FetchDatabase hente = new FetchDatabase ();. Allusers.ItemsSource = hente .getUsers ();
    Trinn 3: Oppdatere Records

    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.
    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 (); }}

    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
    DatabaseUpdate oppdatering = new DatabaseUpdate ();. Update.UpdateUser (1, "[email protected]", "vivek.maskara");

    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
    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

    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.
    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 (); }}

    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
    DatabaseDelete slette = new DatabaseDelete ();. Delete.DeleteUser ("1");

    System.Data.Linq montering gir en funksjon DeleteAllOnSubmit å slette flere poster på en gang. Følgende kodebit avkorter User_details tabellen
    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 ();}

    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.

    Konklusjon

    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.