În articolul precedent, ați învățat cum să stocați date în spațiul de stocare izolat al aplicației. În acest articol, ne concentrăm pe lucrul cu bazele de date locale care trăiesc în spațiul de stocare izolat al aplicației. Veți învăța despre operațiile bazei de date utilizând LINQ, schemele bazei de date, precum și modul de preluare a datelor dintr-o bază de date locală.
Puteți stoca date relaționale într-o bază de date localăcare trăiește în spațiul de stocare izolat al aplicației. Toate operațiile bazei de date pe Windows Phone sunt realizate folosind LINQ to SQL. Se utilizează pentru a defini schema bazei de date, a selecta date și a salva modificările fișierului bază de date care se află în dosarul local.
Modelul obiect LINQ la SQL utilizează System.Data.Linq.DataContext
spațiu de nume pentru a efectua un apel proxy către baza de date locală. LINQ to runtime SQL acționează ca o punte între contextul de date obiect și date reale să facă manipulări.
Când lucrați cu baze de date locale pe Windows Phone, este important să țineți cont de următoarele:
mutex
clasa este utilizată.Acest articol arată cum puteți să creați o bază de date locală și să inserați, să actualizați sau să ștergeți date din aceasta. Vom construi o aplicație de probă cu un Detalii utilizator tabel și efectuați diverse operații pe acesta. Vom separa fișierele de cod pentru diferite operații, cum ar fi inserarea, actualizarea și ștergerea din motive de conveniență.
Tabelele pentru baza de date pot fi definite oriunde în aplicație, atâta timp cât acestea sunt accesibile la nivel global. Creăm un fișier separat, DB.cs, pentru toate mesele. În acest fișier specificăm un model de obiect care determină schema bazei de date și creați contextul de date.
Adăugați următoarele directive în partea de sus a paginii DB.cs fișier la referință LINQ la asamblare SQL:
utilizând System.Data.Linq; utilizând System.Data.Linq.Mapping;
Adăugați o clasă de entități numită User_details
care reprezintă tabelul bazei de date a aplicației din baza de date locală. Atributul [Masa]
indică LINQ-ul pentru a rula SQL pentru a muta clasa într-o tabelă de baze de date locale.
[Table] clasa publică User_details [Column (IsDbGenerated = true, IsPrimaryKey = true)] public int ID get; a stabilit; [Coloană] șir public nume utilizator get; a stabilit; [Coloana] șir public user_email get; a stabilit;
După cum puteți vedea, User_details
clasa are trei proprietăți publice care corespund la trei coloane de bază de date:
ID-ul
este o coloană de identificator care este populată automat de baza de date. Este, de asemenea, cheia primară pentru care este creat automat un index al bazei de date. Aceste setări și mai multe sunt specificate cu atributul mapare coloană LINQ la SQL scris deasupra sintaxei proprietății.nume de utilizator
este o coloană pentru a stoca numele utilizatorului.USER_EMAIL
este o coloană pentru a stoca adresa de e-mail a utilizatorului.Clasa UserDataContext
moștenește de la DataContext
și este denumită contextul de date. Acest cod apelează constructorul de bază și declară tabela bazei de date numită User_details
. Baza de date locală este stocată în spațiul de stocare izolat al aplicației și în exemplul nostru este salvat ca Databases.sdf
.
clasa publică UserDataContext: DataContext șir static public DBConnectionString = @ "isostore: /Databases.sdf"; public UserDataContext (string connectionString): bază (connectionString) tabel publicUtilizatorii get return this.GetTable ();
Rețineți că șirul de conectare a bazei de date nu este necesar să fie un câmp static. Folosim DBConnectionString
în acest caz doar pentru confort.
Pentru a crea baza de date, deschideți codul din spatele fișierului aplicației, numit App.xaml.cs. Adăugați următorul cod la sfârșitul constructorului, numit App
.
folosind (UserDataContext context = nou UserDataContext (UserDataContext.DBConnectionString)) if (! context.DatabaseExists ()) context.CreateDatabase ();
Codul de creare a bazei de date este adăugat aici, astfel încât baza de date să fie prezentă înainte ca codul să se execute din pagina principală. Codul verifică existența bazei de date și, dacă nu există o bază de date, se creează o bază de date nouă.
Odată ce contextul de date a fost construit și baza de date a fost creată, putem efectua operațiuni pe acesta. Puteți introduce, actualiza și șterge înregistrări din tabelul pe care tocmai l-am creat. Am creat clase separate pentru a ține funcții pentru operațiile de inserare, ștergere și actualizare.
Este convenabil să creați un fișier de clasă separat, DatabaseAdd.cs, pentru adăugarea oricăror înregistrări în baza de date. Definiți o funcție Adăugați utilizator
care ia Nume
și EMAIL_ID
ca parametri și adaugă o înregistrare la User_details
masa.
public void AddUser (Nume șir, E-mail de șir) folosind (UserDataContext context = nou UserDataContext (UserDataContext.DBConnectionString)) User_details du = new User_details (); du.user_name = nume; du.user_email = email; context.Users.InsertOnSubmit (du); context.SubmitChanges ();
Adăugați utilizator
funcția utilizeazăUserDataContext
context de date pentru a vă conecta la baza de date, creează o nouă instanță a User_details
entitate și introduce o înregistrare.
Elementele noi care au fost adăugate în contextul de date nu sunt salvate în baza de date până la Trimite schimbări
se numește funcția. Suna Adăugați utilizator
pentru a adăuga o înregistrare în baza de date.
Baza de dateAdăugați add = new DatabaseAdd (); add.AddUser ( "vivek", "[email protected]");
Creați un fișier de clasă separat, FetchDatabase.cs, pentru preluarea înregistrărilor din baza de date. Această clasă conține a GetAllUsers
funcție care returnează o IList
exemplu, conținând înregistrările extrase din tabel.
Conexiunea este configurată utilizând contextul de date după care sunt extrase înregistrările din User_details
masa. Întrebarea LINQ returnează un mesaj IList
instanță conținând înregistrările preluate. IList
exemplu nu este altceva decât o colecție de obiecte de același tip.
public IListGetAllUsers () IList list = null; folosind (UserDataContext context = nou UserDataContext (UserDataContext.DBConnectionString)) IQueryable interogare = de la c în context.Users selectați c; list = query.ToList (); listă de returnare;
În fragmentul de cod de mai jos definim a Utilizatori
clasa cu membrii de date id
, Nume
, și e-mail
pentru a ține detaliile din înregistrările preluate.
utilizatori de clasă public string id get; a stabilit; numele șirului public get; a stabilit; șir de e-mail public get; a stabilit;
Creați o altă funcție, getAllUsers
, care returnează o listă de Utilizatori
când este chemat. Funcția creează o listă nouă pentru a ține detaliile utilizatorilor preluați. Se iterează prin IList
instanță numită usrs
și adaugă detaliile fiecărui utilizator la toți utilizatorii
instanță.
Lista publicăgetUsers () IList usrs = this.GetAllUsers (); Listă allUsers = Listă nouă (); foreach (User_details m în usrs) Utilizatori n = noi Utilizatori (); n.id = m.ID.ToString (); n.name = m.user_name; n.email = m.user_email; allUsers.Add (n); return allUsers;
În exemplul de aplicare a acestui articol, getUsers
funcția este utilizată pentru a seta ItemSource
din listbox
numit toți utilizatorii
așa cum se arată mai jos.
FetchDatabase fetch = noua FetchDatabase (); allusers.ItemsSource = fetch.getUsers ();
Actualizarea înregistrărilor este foarte asemănătoare cu adăugarea de înregistrări la un tabel. Continuând cu abordarea noastră modulară, vom crea un nou fișier de clasă, DatabaseUpdate.cs, pentru actualizările bazei de date. Spre deosebire de operațiile de ștergere, nu există nicio funcție de actualizare a mai multor înregistrări simultan.
Adăugați o funcție UpdateUsers
care acceptă o id
, Nume
, și EMAIL_ID
, și actualizează rândul de tabel pentru suma corespunzătoare id
.
public void UpdateUser (int id, String email, String name) folosind (UserDataContext context = nou UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = de la c în context.Users unde c.ID == id selectați c; User_details entitToUpdate = entitateQuery.FirstOrDefault (); entityToUpdate.user_name = nume; entityToUpdate.user_email = email; context.SubmitChanges ();
Funcția interoghează baza de date și stochează prima înregistrare potrivită în entityToUpdate
variabil. Apoi actualizează înregistrarea atribuind noile valori și transmite modificările pentru a actualiza baza de date.
Baza de date nu este actualizată până când nu sunăm Trimite schimbări
funcţie. Această funcție va actualiza numai prima înregistrare potrivită. UpdateUser
este apelată pentru a actualiza înregistrările existente în baza de date, după cum se arată mai jos.
DatabaseUpdate update = nouă DatabaseUpdate (); update.UpdateUser (1, "[email protected]", "vivek.maskara");
Pentru a actualiza mai multe înregistrări, va trebui să iterați prin înregistrările pe care doriți să le actualizați unul câte unul. În următorul fragment de cod, actualizăm numele fiecărei utilizări din baza de date, făcându-l în litere mici.
folosind (UserDataContext context = nou UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = de la c în context.Users selectați c; IList entityToUpdate = entitateQuery.ToList (); foreach (User_details utilizator în entityToUpdate) user.user_name = user.user_name.ToLower (); context.SubmitChanges ();
Creați un fișier de clasă, DatabaseDelete.cs ,pentru operațiile de ștergere. În DatabaseDelete
clasă, adăugați a DeleteUser
care acceptă un parametru id
și șterge un singur utilizator ale cărui id
se potrivește cu parametrul transmis.
public void DeleteUser (id șir) // șterge utilizatorul după id folosind (UserDataContext context = nou UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = de la c în context.Users unde c.ID.Equals (id) selectați c; User_details entităToDelete = entitateQuery.FirstOrDefault (); context.Users.DeleteOnSubmit (entityToDelete); context.SubmitChanges ();
Funcția de apeluri DeleteOnSubmit
, care șterge o singură înregistrare din baza de date. Modificările sunt salvate când Trimite schimbări
se numește funcția. DeleteUser
funcția șterge o singură înregistrare din baza de date, după cum se arată mai jos.
Bază de dateDelete delete = new DatabaseDelete (); delete.DeleteUser ( "1");
System.Data.Linq
ansamblul furnizează o funcție DeleteAllOnSubmit
pentru a șterge mai multe înregistrări simultan. Următorul fragment de cod trunchiază User_details
masa.
folosind (UserDataContext context = nou UserDataContext (UserDataContext.DBConnectionString)) IQueryableentityQuery = de la c în context.Users selectați c; IList entityToDelete = entitateQuery.ToList (); context.Users.DeleteAllOnSubmit (entityToDelete); context.SubmitChanges ();
Această funcție acceptă o listă de înregistrări și șterge înregistrările din lista respectivă. Rețineți că în ambele cazuri modificările sunt salvate numai atunci când Trimite schimbări
se numește funcția.
Aplicațiile Windows Phone utilizează LINQ pentru SQL pentru toate operațiile bazei de date. LINQ to SQL este folosit pentru a defini schema bazei de date, a selecta date și a salva modificările din fișierul bazei de date care stă la baza stocării izolate a aplicației. LINQ to SQL oferă o abordare orientată pe obiecte pentru lucrul cu datele stocate într-o bază de date și constă dintr-un model de obiect și un runtime. Vă recomandăm să citiți acest articol MSDN pentru cele mai bune practici privind utilizarea bazelor de date locale. Simțiți-vă liber să descărcați fișierele sursă ale tutorialului pentru a le utiliza ca referință.