Linq To SQL

10
Linq To SQL Fagdag 20. November 2009

description

Linq To SQL. Fagdag. 20. November 2009. DataContext. DataContexten er mappingen mot databasen Generer objekter for alle entiteter (tabeller), med properties for alle kolonner - PowerPoint PPT Presentation

Transcript of Linq To SQL

Page 1: Linq To SQL

Linq To SQL

Fagdag

20. November 2009

Page 2: Linq To SQL

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

Page 3: Linq To SQL

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

Page 4: Linq To SQL

Enkle spørringer

Hent data fra en tabell

var persons = from person in dataContextenMin.Persons

Select person;

Selskapspresentasjon 2007 Side 4

Page 5: Linq To SQL

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

Page 6: Linq To SQL

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

Page 7: Linq To SQL

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

Page 8: Linq To SQL

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

Page 9: Linq To SQL

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

Page 10: Linq To SQL

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