Download - Linq To SQL
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 Side 2
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 Side 3
Enkle spørringer
Hent data fra en tabell
var persons = from person in dataContextenMin.Persons
Select person;
Selskapspresentasjon 2007 Side 4
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 Side 5
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 Side 6
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 Side 7
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 Side 8
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 Side 9
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 Side 10