100 likes | 321 Views
Linq To SQL. Fagdag. 20. November 2009. DataContext. DataContexten er mappingen mot databasen Generer objekter for alle entiteter (tabeller), med properties for alle kolonner
E N D
Linq To SQL Fagdag 20. November 2009
DataContext • DataContexten er mappingen mot databasen • Generer objekter for alle entiteter (tabeller), med properties for alle kolonner • Det er disse objektene vi jobber med, og når vi submitter endringer så sørger DataContexten for at databasen oppdateres korrekt • Henter vi ut samme entitet flere ganger, så ser DataContexten dette og sørger for at det kun er ett objektet som representerer entiteten • Sette opp DataContext: • Add new item: LINQ to SQL Classes -> gir deg en .dbml fil • Koble opp databaseconnection i server explorer og utvid den så du ser tabellene • Dra de tabellene du ønsker å bruke fra server explorer inn i vinduet til .dbml filen Selskapspresentasjon 2007
Entiteter og tabeller vs klasser og properties • Opprett en instans av datacontexten din: • MyDataContext dataContextenMin = new MyDataContext(); • Hver entitet har blitt til en en klasse • Entiteten Person -> klassen MyDataContext.Person • Selve tabellen får man tak i som en property på datacontexten med en ”s” lagt til på slutten av navnet • Tabellen Person -> dataContextenMin.Persons av type System.Data.Linq.Table<Person> Selskapspresentasjon 2007
Enkle spørringer • Hent data fra en tabell var persons = from person in dataContextenMin.Persons Select person; Selskapspresentasjon 2007
Enkle spørringer • Sett inn data in en tabell ved å opprette en ny instans av en entitet og bruke InsertOnSubmit på tabellen og SubmitChanges på datacontexten Person nyPerson = new Person(){Navn = ”Per”}; dataContextenMin.Persons.InsertOnSubmit(nyPerson); dataContextenMin.SubmitChanges(); Selskapspresentasjon 2007
Enkle spørringer • Endre data ved å hente ut en entitet, endre den og så kjøre SubmitChanges på datacontexten Person personSomSkalEndres = from person in dataContextenMin.Persons where person.Id == 1 select person; personSomSkalEndres.Navn = ”Truls”; dataContextenMin.SubmitChanges(); • Evt slett den ved å kjøres DeleteOnSubmit på tabellen dataContextenMin.DeleteOnSubmit(personSomSkalEndres); dataContextenMin.SubmitChanges(); Selskapspresentasjon 2007
Join Var personerMedFylke = from person in dataContextenMin.Persons join fylke in dataContextenMin.Fylkes on person.fylkeId equals fylke.Id select new{person.Navn, fylke.Navn}; Selskapspresentasjon 2007
Group by og orderby Var personsGroupedByFylke = from person in dataContextenMin.Persons group person by person.fylkeId into groupedPersons from person in groupedPersons select person; Var personsGroupedByFylke = from person in dataContextenMin.Persons orderby person.fylkeId select person; Selskapspresentasjon 2007
IQueryable vs IEnumerable Var personsInOppland = from person in dataContextenMin.Persons where fylkeId==2 select person; (ingenting kjørt mot databasen enda) Var personsInOpplandAbove50Years = from person in personsInOppland where person.Age > 50 select person; (fortsatt ingen spørring kjørt mot databasen) Foreach(var person in personsInOpplandAbove50Years){ Console.WriteLine(person.Name+” er over 50 år og bor i Oppland); } I det første element blir forsøkt hentet, så kjøres den sammensatte spørringen mot databasen. Selskapspresentasjon 2007
Oppgavene • Databasen ligger i prosjektet (Fagdag.mdf) • Du kan se innholdet i en tabell ved å gå i server explorer, utvide Fagdag.mdf så du ser tabellene, høyreklikk på en tabell og velg ”Show Table Data”. Greit for å vite hvilke ID-er som er gyldige å lete etter hvis du trenger det ;) • Databasen er relativt enkel; det er ikke satt opp fremmednøkler så relasjonene er ”gitt” ved navnet på kolonnene. TrackId i Person-tabellen skal være et tall som finnes i Id i Track-tabellen, osv • Løsningen finnes i alle oppgavene, men prøv å løs de selv! Kanskje finner du en smartere måte å gjøre det på Selskapspresentasjon 2007