- telefon 8 koncist: data adgang til oplagring

, vinduer telefon 8 koncist: data adgang til oplagring,,,,, 22,,,,,,,,,,,,,,,,,,, det cyber - mandag envato tuts + kurser vil blive reduceret til $3.- og' t miss. denne post er en del af en serie kaldet vinduer telefon 8 koncist. vinduer telefon 8 koncist: centrale conceptswindows telefon 8 koncist: adgang til data net, lokal oplagring, internettet spiller en vigtig rolle i mobile applikationer.de fleste vinduer telefon - applikationer, der er til rådighed i butikken, gøre brug af netværkstilslutningen, der tilbydes af enhver anordning.det bygger kun på nettet - forbindelse kan være en fejltagelse og brugere kan finde sig selv i situationer, hvor ingen forbindelse til rådighed.desuden har data planer er ofte begrænsede, så færre netdriften, vi gør, bedre brugeren er erfaring.,, vinduer, telefon, giver en særlig måde at opbevare lokale data, isoleret oplagring.det virker som en almindelig sag system, så du kan skabe mapper og filer som en computer - harddisk.forskellen er, at oplagring er isoleret, kun deres ansøgninger kan bruge det.ingen andre anvendelser kan få adgang til deres lagre, og brugere, ikke er i stand til at se det, når de stiller deres telefon til computeren.som en sikkerhedsforanstaltning, isoleret oplagring er den eneste oplagring, at ansøgningen kan bruge.du har ikke tilladelse til at få adgang til operativsystem mapper eller skrive data i ansøgningen er mappe.,, lokal oplagring er et af de elementer, som giver dobbelt apis den gamle silverlight bygger på, isolatedstoragefile, klasse og de nye vinduer runtime bygger på, localfolder, klasse.som nævnt i begyndelsen af den serie, vi skal fokusere på vinduerne runtime apis.,, der arbejder med foldere, basen klasse, som identificerer en mappe i lokal oplagring kaldes, storagefolder,.selv roden til oplagring (som kan nås ved hjælp af den, applicationdata.current.localstorage, klasse, der er en del af, windows.storage, namespace) er en storagefolder, objekt.,, denne klasse udsætter forskellige asynkron metoder til at interagere med den nuværende folder, som f.eks.:,,, createfolderasync(), at skabe en ny mappe i denne vej, getfolderasync(), for at få en henvisning til en subfolder af den nuværende vej.,, getfoldersasync(), til at få listen af foldere, der findes i den nuværende retning.,, deleteasync(), at fjerne den nuværende mappe.,, renameasync(), at omdøbe en mappe, i følgende prøve, kan du se hvordan skabes der en mappe i lokal oplagring er årsag:,,, private async tomrum oncreatefolderclicked (objekt afsender, routedeventargs e) (afventer applicationdata. nuværende. localfolder. createfolderasync ("myfolder");}, desværre apis har ikke en metode til at kontrollere, om en folder, der allerede findes.den enkleste løsning er at forsøge at åbne mappen med, getfolderasync(), metode og stoppe den, filenotfoundexception, fejl, der er rejst, hvis den mappe, findes ikke, som vist i følgende prøve:,,, private async tomrum onopenfileclicked (objekt afsender, routedeventargs e) (storagefolder mappe. prøv {mappe = afventer applicationdata. nuværende. localfolder. getfolderasync ("myfolder");} fangst (filenotfoundexception ud) {mappe = ugyldig;} hvis (mappe, = = null) (messagebox. (se "mappen eksisterer ikke")), i samarbejde med filer, filer, i stedet, identificeres ved, storagefile klasse, som ligeledes indeholder metoder til at påvirkemed filer:,,, deleteasync(), for at slette en fil,.,, renameasync(), at omdøbe en fil,.,, copyasync(), at kopiere en fil fra et sted til et andet.,, moveasync(), til at flytte en fil fra et sted til et andet, er udgangspunktet for at manipulere med en fil er, storagefolder, klasse vi tidligere har drøftet, da det er metoder til at åbne en eksisterende fil (, getfileasync(),) eller at skabe nye i denne folder (, createfileasync(),.,, lad os gennemgå de to mest almindelige aktiviteter: skrivning indhold til en fil og læser indholdet fra en fil,, hvordan der kan skabes. en fil, som allerede nævnt, det første skridt til at oprette en fil, er at bruge den, createfile(), metode på en, storagefolder, objekt.følgende prøve viser, hvordan vi kan skabe en ny filen, file.txt i lokal oplagring er årsag:,,, private async tomrum oncreatefileclicked (objekt afsender, routedeventargs e) (storagefile file = afventer applicationdata. nuværende. localfolder. createfileasync ("fil. txt", creationcollisionoption. replaceexisting)}, kan du også give den valgfri parameter, creationcollisionoption, at metoden til at definere den opførsel til brug i tilfælde af, at en fil med samme navn allerede eksisterer.i den foregående prøve, replaceexisting, værdi anvendes til at træde i stedet for de eksisterende fil.,,, nu hvor du har et sagsnummer, takket være den, storagefile, genstand, du er i stand til at arbejde med på, openasync() metode.denne metode giver fil strøm, som du kan bruge til at skrive og læse indholdet. følgende prøve viser, hvordan vi kan skrive tekst i sagen:,,, private async tomrum oncreatefileclicked (objekt afsender, routedeventargs e) (storagefile file = afventer applicationdata. nuværende. localfolder. createfileasync ("fil. txt", creationcollisionoption. replaceexisting); irandomaccessstream randomaccessstream = afventer fil. openasync (fileaccessmode. readwrite); anvendelse af (datawriter forfatter = nye datawriter (randomaccessstream. getoutputstreamat (0)) (forfatter. writestring ("stikprøve tekst"); afventer forfatter. storeasync();}}, er det afgørende, datawriter, klasse, som er vinduer runtime klasse, der kan anvendes til at skrivedata til en fil.vi er simpelthen nødt til at skabe en ny, datawriter, genstand, som en parameter output strøm af den sag, vi kommer med, getouputstreamat(), metode på strømmen tilbage af det, openasync() metode.,,, datawriter, klasse giver mange metoder til at skrive forskellige datatyper, som writedouble(), for antallet af decimaler, writedatetime(), datoer, og writebytes() for binære data.i stikprøven, vi skriver teksten ved hjælp af, writestring(), metode, og så ringer vi til det, storeasync(), og flushasync(), metoder til at færdiggøre de skriver operation.,,,, note:,,,,,,,,,, kan anvendes med klasser, der støtter idisposable grænseflade.de er typisk objekter, der spærrer en ressource, indtil de er færdige, som i den foregående prøve.indtil de skriver operation er afsluttet, ingen andre metoder kan få adgang til sagsakterne.med den, ved hjælp af,,, erklæring, og vi sørger for, at den lås, frigives, når operationen er afsluttet.,,,,, hvordan man læser en fil, operation for at læse fil er ikke meget forskellige fra at skrive en.i dette tilfælde, er vi også nødt til at få papirerne strøm af, openfile() metode.forskellen er, at i stedet for at bruge det, datawriter, klasse, vi skal bruge det, datareader, klasse, der gør det modsatte.se efter prøvens kode:,,, private async tomrum onreadfileclicked (objekt afsender, routedeventargs e) (storagefile file = afventer applicationdata. nuværende. localfolder. getfileasync ("fil. txt"); irandomaccessstream randomaccessstream = afventer fil. openasync (fileaccessmode. læs); anvendelse af (datareader læser = nye datareader (randomaccessstream. getinputstreamat (0)) (uint bytesloaded = afventer læser. loadasync ((uint) randomaccessstream. størrelse). readstring = læser. readstring (bytesloaded); messagebox. (se readstring)}}, i dette tilfælde i stedet for den, createfileasync(), metode, vi anvender, getfileasync(), metode, der kan anvendes til at få en henvisning til en allerede eksisterende fil.så begynder vi at læse proceduren efter, datareader, klasse, denne gang med den indgående strøm, at vi kommer med, getinputstreamat(), metode, som den, datawriter, klasse, datareader, giver også mange metoder til at læse de forskellige datatyper, readdouble(),, readdatetime(), og readbytes(),.i dette tilfælde, vi læser den tekst, vi tidligere har foretaget ved at anvende det, readstring(), metode, hvorefter størrelsen af de sagsakter, som parameter.,, en særlig folder: installedlocation, den lokale oplagring er den eneste oplagring, vi kan bruge til at skrive vores anvendelse af data, men i nogle tilfælde kan vi behovet for at medtage i vores projekt nogle eksisterende sager, der skal behandles af anvendelsen, vinduerne runtime giver en adi for at give adgang til den mappe, hvor ansøgningen er installeret, og hvor alle filer, der er en del af din visuelle studie projekt er kopieret.det kaldes, pakke. nuværende. installedlocation,, og det er en del af, windows.applicationmodel, namespace.,,, installedlocation, type, storagefolder, som folderne i lokal oplagring, så du kan bruge de samme metoder til at arbejde med sager og mapper.husk på, at du ikke vil være i stand til at skrive data, men kun læser det, i følgende prøve, vi modtager en fil fra anvendelsen er mappen til lokal oplagring, så vi får skrive adgang.,,, private async tomrum oncopyfileclicked (objekt afsender, routedeventargs e) (storagefile file = afventer pakke. nuværende. installedlocation. getfileasync ("fil. xml -"); afventer fil. copyasync (applicationdata. nuværende. localfolder)}, note: under udvikling, du kan mærke, at du vil være i stand til at udføre skrive operationer i anvendelse er mappe.regn ikke med det under certificeringsprocessen, app er låst, når programmet, er fordelt på vinduerne telefon butikken, skrive adgang er tilbagekaldt, og du vil begynde at få undtagelser.,,, forvalte indstillinger, en fælles scenario i mobile udvikling er nødvendigt at opbevare indstillinger.mange ansøgninger, tilbyde en indstillinger side, hvor brugerne kan vælge forskellige muligheder. for at gøre det muligt for udviklere, hurtigt at fuldføre denne opgave, sdk omfatter en gruppe, som kaldes, isolatedstoragesettings,, som giver en ordbog, applicationsettings, som du kan bruge til at oplagre indstillinger.,,, note:,,, isolatedstoragesettings,,, - er en del af den gamle oplagring apis, vinduerne runtime giver en ny api til at forvalte miljøer, men desværre er det ikke til rådighed i vinduerne telefon.,,,, ved, applicationsettings, ejendom, er meget enkel: type er, ordbog < snor, objekt > og det kan anvendes opbevarer en genstand, i det følgende prøve, kan du se de to tilfælde: for det første en redder et objekt i miljøer, mensandet får det.,,, private tomrum onsavesettingsclicked (objekt afsender, routedeventargs e) (isolatedstoragesettings indstillinger = isolatedstoragesettings.applicationsettings; indstillinger. der tilsættes ("navn", "matteo"); indstillinger. save();} private tomrum onreadsettingsclicked (objekt afsender, routedeventargs e) (isolatedstoragesettings indstillinger = isolatedstoragesettings.applicationsettings; hvis (indstillinger. indeholder ("navn") (messagebox. (se indstillinger ["navn"]. tostring())), den eneste ting at fremhæve, er, save(), metode, som du har brug for at ringe hver gang du vil fortsætte de ændringer, de har foretaget.bortset fra dette, det virker som en normal, ordbog, samling.,,,, note: under hjelmen, indstillinger er lagret i en xml - filer.api automatisk tager sig af serializing og deserializing genstand, du reddede.vi vil tale mere om serialization senere i denne artikel,.,,,, debugging - lokal oplagring, et fælles krav om en entreprenør arbejder med lokal oplagring er evnen til at se, hvilke filer og foldere, faktisk er oplagret.da oplagring er isolerede, udviklere kan ikke forbinde telefon til en computer og undersøge det. - den bedste måde at se en ansøgning er lokal oplagring ved hjælp af et eksternt værktøj, der er til rådighed på codeplex kaldet vinduer telefon værktøj, som giver et visuelt grænseflade til undersøgelse af en ansøgning er lokal oplagring, værktøj. er let at bruge.efter du har installeret det, vil du være i stand til at forbinde en anordning eller et af de til rådighed emulators.så i, isoleret oplagring, afsnit, vil du se en liste over alle de ansøgninger, der er blevet side læsset af visuelle studie.hver enkelt skal identificeres ved dets anvendelse id (som er en vejviser).som en almindelig sag explorer, kan du udvide træ struktur og analysere oplagring indhold.du vil være i stand til at redde filer fra anordningen til din pc, kopierer filer fra din pc med anvendelsen oplagring og endda slette punkter.,,,,,, lagring af teknikker, der i det foregående afsnit, vi drøftede den grundlæggende apis, der opbevarer dokumenter og foldere i din ansøgning.i dette afsnit vil vi gå dybere for at se de bedste metoder til opbevaring af din ansøgning er data, således at det kan opretholdes i de forskellige ansøgninger,.,, serialization og deserialization,, serialization er den nemmeste måde at opbevare en ansøgning er data i lokal oplagring.det er en proces, der omdanner komplekse objekter i almindelig tekst, så de kan oplagres i en tekstfil, brug af xml - eller json som produktion.deserialization er den modsatte proces; almindelig tekst er konverteret til objekter, således at de kan anvendes af ansøgningen.,, i en ansøgning, der anvender disse teknikker, vinduer, telefon, serialization er typisk anvendes hver gang anvendelse er data ændres (, når et nyt punkt tilføjes, redigeret, eller fjernes) for at minimere den risiko for at miste data, hvis der sker noget, som en uventet styrt eller en suspension.deserialization i stedet, normalt er i anvendelse, når de anvendes for første gang, serialization er meget enkel at anvende, men dets anvendelse bør begrænses til ansøgninger, der arbejder med små mængder af data, fordi alt holdes i erindring under gennemførelsen.det passer bedst til scenarier, hvor data til at spore er enkel.hvis du er nødt til at håndtere mange forhold, databaser, er sikkert en bedre løsning, vi vil tale mere om det senere i artiklen). i de følgende prøver, vi skal bruge den samme person, gruppe, vi havde tidligere i denne serie.,,, offentlige klasse person (offentlige snor navn (kom, sæt;} offentlige snor efternavn (kom,,), går vi ud fra, at du vil have en samling af personer, genstande, der svarer til deres lokale data:,,, - listen < person > folk = nye liste < person > (nye person {navn = "matteo", efternavn = "pagani"), ognye person {navn = "john", efternavn = "do"}};,, serialization, at sandt vores ansøgning er oplysninger, vi skal bruge det lokale oplagring apis, vi hørte om i det foregående afsnit.vi bruger den, createfile(), metode, som vist i følgende prøve:,,, private async tomrum onserializeclicked (objekt afsender, routedeventargs e) (datacontractserializer serializer = nye datacontractserializer (type (liste < person >)); storagefile file = afventer applicationdata. nuværende. localfolder. createfileasync ("folk. xml -"); irandomaccessstream randomaccessstream = afventer fil. openasync (fileaccessmode. readwrite); anvendelse af strøm å = randomaccessstream. asstreamforwrite()) (serializer. writeobject (strøm, folk); afventer strøm. flushasync();}},,, datacontractserializer, klasse (som er en del af, system.runtime.serialization, namespace) tager sig til forvaltning af serialization proces.når vi skaber en ny instans, er vi nødt til at præcisere, hvilke data type, vi skal nå, virkelig (i den foregående prøve, det er liste < person >,).næste, skaber vi et nyt dossier i lokal oplagring og få den strøm, der er nødvendige for at skrive data.den serialization operation er gjort ved at, writeobject(), metode for, datacontractserializer, klasse, som kræver som parametre det sted, hvor skrive data og imod sandt.In this example, it’s the collection of ,Person, objects we’ve previously defined.,,If you take a look at the storage content using the Windows Phone Power Tools, you’ll find a ,people.xml, file, which contains an XML representation of your data:,,,<ArrayOfPerson xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/Storage.Classes"> <Person> <Name>Matteo</Name> <Surname>Pagani</Surname> </Person> <Person> <Name>John</Name> <Surname>Doe</Surname> </Person> </ArrayOfPerson>,,,Tip: The ,,,DataContractSerializer,,, class uses XML as its output format. hvis du ønsker at bruge json i stedet, bliver du nødt til at bruge den,,, datacontractjsonserializer,,,   klasse, der virker på samme måde deserialization.,,,,,, deserialization proces er meget ens, og indebærer igen, oplagring api - grænseflader til læs filen er indhold og det, datacontractserializer, klasse.følgende prøve viser, hvordan deserialize de data, vi serialized i det foregående afsnit:,,, private async tomrum ondeserializeclicked (objekt afsender, routedeventargs e) (storagefile file = afventer applicationdata. nuværende. localfolder. getfileasync (". -"); datacontractserializer serializer = nye datacontractserializer (type (liste < person, og gt)); irandomaccessstream randomaccessstream = afventer fil. openasync (fileaccessmode. læs); anvendelse af strøm å = randomaccessstream. asstreamforread()) (liste < person > folk = serializer. readobject (å) som liste < person >), den eneste forskelle: får vi strøm for at læse ved hjælp af den, asstreamforread() metode., vi bruger, readobject(),metode for den, datacontractserializer, klasse, deserialize filens indhold, som tager sagen strøm som input parameter.det er vigtigt at bemærke, at den metode, vender altid tilbage en generisk protestere, så vil du altid nødt til at kaste den til din rigtige datatype (i stikprøven, vi stemmer som liste < person >,.), ved hjælp af databaser: sql ce, når man udvikler komplekse ansøgninger, - nok til at håndtere komplekse data.databaser er en god løsning at håndtere denne situation, fordi de støtter forhold, og fordi hele datasættet ikke holdes i erindring, kun den nødvendige punkter.,, sql - databasen løsning, som blev indført i vinduerne telefon 7.5.det er en separat database, hvilket betyder, at data, der er lagret i en enkelt fil i oplagring uden at skulle have et dbms at forvalte alle de operationer, vinduer, telefon bruger sql ce 3,5 (den seneste løsladelse på dette tidspunkt er perfekte, men det er ikke støttet) og ikke støtter sql forespørgsel henrettelse.hver operation er foretaget ved hjælp af linq for sql, som er en af de første af microsofts orm løsninger.,,,, note: orm (objekt forhold kortlægning) løsninger er biblioteker, der er i stand til at automatisk omsætte objekt operationer (angiv, redigere, fjerne) i databasen operationer.den måde, du arbejder på din projekt ved hjælp af en samt tilgang.orm vil tage sig af den krævede sql forespørgsler at opbevare data i databasen,.,,,,, at den tilgang, der anvendes af sql ce på vinduer telefon ringede, kode først.databasen er skabt den første gang, de data, der er brug for i henhold til de enheder, definition, at du skal opbevares i tabeller.en anden løsning er, at medtage en allerede eksisterende sql ce - fil i din visuelle studie - projektet.i dette tilfælde vil du kun være i stand til at arbejde med det i rom tilstand.,, hvordan definerer database, er det første skridt til at skabe de enheder, som du skal opbevares i jeres database.hver enhed, tildeles en særlig tabel.,, enhed definition er foretaget ved hjælp af attributter, der er en del af det, system.data.linq.mapping, namespace.hver ejendom er dekoreret med en attribut, som vil blive anvendt til at omsætte det til en spalte.i det følgende prøve vi tilpasser den kendte person, gruppe, opbevares i en tabel:,,, [tabel] offentlige klasse, {(kolonne (isprimarykey = sandt, canbenull = falske, isdbgenerated = sand)] offentlige snor id (få; der;} [kolonne] offentlige snor navn (kom,;} [kolonne] offentlige snor efternavn (kom,,), hele enhed er mærket med, tabel, attribut, mens hver ejendom er mærket med, kolonne attribut.attributter kan blive skræddersyet med nogle egenskaber, som:,,, isprimarykey, anvendelse på kolonner, der er en del af den primære nøgle.,, isdbgenerated i kolonnen værdi skal være automatisk, hver gang en ny række indsættes (f.eks. automatisk øget antal, betegnelse, hvis). du ønsker at overdrage til kolonnen et andet navn end den ejendom,.,, dbtype, til at vælge, kolonnen type.ved misligholdelse, kolonnen type automatisk er fastsat af ejendommens art.,, der arbejder med databasen: datacontext,,, datacontext, er en special - klasse, der fungerer som mellemled mellem database og deres anvendelse.det afslører alle de metoder, der er nødvendige for at opfylde de fælles operationer, som indsætter, ajourføre og slette.,,, datacontext, klasse indeholder den forbindelse streng definition (som er den vej, hvor databasen er oplagret, og alle de tabeller, der er medtaget i databasen.i det følgende prøve, kan du se, datacontext, definition, der omfatter en person, vi tidligere har defineret:,,, offentlige klasse databasecontext: datacontext {offentlige statiske snor connectionstring = "data kilde: isostore: /personer. sdf" offentlige databasecontext (string - connectionstring): base (connectionstring) {} offentlige tabel < person > personer), en særskilt klasse af dit projekt arver fra, datacontext, klasse.det vil tvinge dem til at gennemføre en offentlig konstruktør, der støtter en forbindelse snor som input parameter.der er to forbindelse snor former, baseret på følgende præfikser:,,, isostore: ///////, betyder, at dossieret opbevares i den lokale oplagring.i den foregående prøve, databasen file navn er persons.sdf, og det er lagret i oplagring er rod.,, appdata: ///////, betyder, at dossieret opbevares i den visuelle studie projekt i stedet for.i dette tilfælde, er du nødt til at fastsætte, fil tilstand, tilskriver read only,.,, offentlige statiske snor connectionstring = "data kilde: appdata: /persons.sdf; fil mode = read only", der med tiden kan du også kryptering af databasen ved at tilføje en, kodeord, tilskrive den forbindelse serie:,,, offentlige statiske snor connectionstring = "data kilde: isostore: /persons.sdf; password ='password";,, at databasen, så snart de data, der er brug for, du bliver nødt til at skabe en database, hvis den eksisterer ikke endnu.til dette formål, datacontext, klasse afslører to metoder:,,, databaseexists(), vender tilbage om databasen findes allerede.,, createdatabase(), effektivt skaber database, oplagring, i følgende prøve, kan du se en typisk database initialization, der udføres hver gang anvendes:,,, private ugyldige oncreatedatabaseclicked (objekt afsender, routedeventargs e) (ved hjælp af (databasecontext db = nye databasecontext (databasecontext. connectionstring)) (hvis (!db. databaseexists()) (db. createdatabase();}}}, i samarbejde med de data, de transaktioner foretaget ved hjælp af tabel < t >, objekt, som vi har angivet i den, datacontext, definition.det støtter standard linq operationer, så du kan høre data ved hjælp af metoder, som where(),, firstordefault(),, select(), og orderby(),.,, er det i følgende prøve, kan du se, hvordan vi finder alle, personer, genstande i tabellen, hvis navn er matteo:,,, private tomrum onshowclicked (objekt afsender, routedeventargs e) (ved hjælp af (databasecontext db = nye databasecontext (databasecontext. connectionstring)) (liste < person > personer = db. personer. hvor (x = > x. navn = = "matteo"). tolist();}}, returneres resultat kan anvendes ikke kun til fremvisning formål, men også til redigering.at ajourføre det i databasen, kan du ændre værdierne af de returnerede genstand ved at, submitchanges(), metode afsløret af, datacontext, klasse, for at tilføje nye punkter til den tabel, tabel < t >, klasse omfatter to metoder:, insertonsubmit(), og insertallonsubmit(),.den første metode kan anvendes til at tilføje en enkelt ting, mens det andet tilføjer flere punkter i en operation (og det accepterer en samling som et parameter).,,, private tomrum onaddclicked (objekt afsender, routedeventargs e) (ved hjælp af (databasecontext db = nye databasecontext (databasecontext. connectionstring)) (person person = nye person {navn = "matteo", efternavn = "pagani"), db. personer. insertonsubmit (person), db. submitchanges();}}, bemærk venligst igen, submitchanges(), metode: det er vigtigt at kalde det, hver gang du ændre tabellen (ved at tilføje et nyt punkt på dagsordenen eller udformning eller sletning af en allerede eksisterende), ellers ændringer vil ikke blive reddet.,,samme måde, du kan slette punkter ved hjælp af den, deleteonsubmit(), og deleteallonsubmit() metoder.i det følgende prøve, vi slette alle personer med navnet matteo:,,, private tomrum ondeleteclicked (objekt afsender, routedeventargs e) (ved hjælp af (databasecontext db = nye databasecontext (databasecontext. connectionstring)) (liste < person > personer = db. personer. hvor (x = > x. navn = = "matteo"). tolist(); db. personer. deleteallonsubmit (personer), db. submitchanges();}}, forhold, i det foregående afsnit, vi har talt om data, der er lagret i en enkelt tabel.nu er det tid til at indføre forhold, som er en måde til at forbinde to eller flere tabeller.som et eksempel vil vi tilføje en ny orden, enhed, at vores database, som vi kan bruge til at redde de ordrer, som brugere opbevares i, person, tabel., med linq for sql vil vi være i stand til at:,, tilføje en person, ejendomsret til orden, enhed, som vil opbevarer en henvisning til den bruger, der har ordre., tilføje en ordre, indsamling, at den person, den enhed, som vil indeholde alle de ordrer, som de bruger, dette er opnået ved hjælp af en udenrigs - nøgle, som er en ejendom er anmeldt i orden, enhed, som vil holde den primære afgørende værdi for brugerne, der gav ordren.  , her er hvordan, for klasse ser:,,, [tabel] offentlige klasse for {(kolonne (isprimarykey = sand)] offentlige int ordercode {få; der;} [collinn] offentlige dobbelt totalprice {få; der;} [kolonne] offentlige snor shippingaddress {få; der;} [kolonne] offentlige int personid {få; der;} private entityref < person > _person; [association (navn = "personorders", oplagring = "_person", thiskey = "personid", otherkey = "personid", isforeignkey = sand)] offentlig person person (kom {tilbage. _person.entity;} {person, der previousvalue =. _person.entity; hvis (((previousvalue!= værdi)



Previous:
Next Page: