linq to sql

10
Linq To SQL Fagdag 20. November 2009

Upload: tamarr

Post on 24-Jan-2016

46 views

Category:

Documents


0 download

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

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