1 / 21

LINQ to SQL käytännössä Kalle Launiala Konsultti ProtonIT Oy

LINQ to SQL käytännössä Kalle Launiala Konsultti ProtonIT Oy. LINQ to SQL käytännössä. Käyttöönotto käynnissä olevaan projektiin Tietokantatietoinen älykäs oliorakenne Työskentelyä tehostavat apuvälineet. Käyttöönotto projektissa.

yama
Download Presentation

LINQ to SQL käytännössä Kalle Launiala Konsultti ProtonIT Oy

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. LINQ to SQL käytännössä Kalle Launiala Konsultti ProtonIT Oy

  2. LINQ to SQL käytännössä • Käyttöönotto käynnissä olevaan projektiin • Tietokantatietoinen älykäs oliorakenne • Työskentelyä tehostavat apuvälineet

  3. Käyttöönotto projektissa • Yleinen pyrkimys jatkuvassa tiukan aikataulun projektissa tekemään myös elinvoimaisia ratkaisuja • Kova paine resurssien kasvattamiseen • Avainhenkilöt täysin ylikuormitettuja • Alustan joustavuus avainasemassa nopeissa määritysmuutoksissa

  4. Lähtötilanne migraatiolle • Olio-relaatiomuunnin ei ole vaihtoehto  sille ei ole vaihtoehtoa • Oma kokemus kehittäjän roolista alkaen VS.NET ja VS.NET 2003, käyttäjäksi VS 2005:n myötä • Käyttöönottopaine muodostui olemassaolevan rakenteen yli menevän toiminnallisuuden toteutuksesta  Koko rakenne kerralla

  5. ... Lähtötilanne migraatiolle • Kasvu kahden pääkehittäjän tiimistä seitsemän kehittäjän tiimiksi • Kaksi kehittäjää jaetuilla alueilla SQL:ssä  LINQ kerros, johon muut kehittäjät heti ja pääkehittäjät aikataulun salliessa • Edellytys: Tietokannan ”täytyi” olla siististi relaatiorakenteinen

  6. Migraation toteutus • Oliorakenne luotiin yhteistyössä nykyisten pääkehittäjien kanssa • ”Pystymetsästä” projektiin • Tiedon eheyttä parannetaan jatkuvasti LINQ validoinnilla • ”Breaking even”, LINQ mallin kautta eheää dataa myös uusien kehittäjien toimesta

  7. Puitteet migraatiolle • Haut LINQ:n läpi kuten vanhan SQL:n • Mikäli stopperi tulisi vastaan, voidaan aina käyttää vanhaa SQL:ää tarvittavin osin • LINQ pystyy käyttämään yhteisiä transaktioita  Kutsuja voidaan konvertoida osissa • Olemassaolevat Stored Proceduret pystyvät palauttamaan LINQ olioita • IMultipleResult, jos paluuarvon tyyppi voi vaihdella

  8. Migraation eteneminen • Kehitystä voidaan tehdä kahdella tekniikalla rinnakkain • Ei ole mielekästä konvertoida kaikkea kerralla; varsinkaan jo poistuvia osia • Uudet osat ja suuremmat muutokset LINQ:lla • LINQ tuo keskitetyn oliorakenteen myös muilta osin sovelluksen tueksi • Haasteena pitää eri osat synkronoituina

  9. ”Heti” realisoituneet hyödyt • Nopeammin ja varmemmin tehtävät kyselyt • Selkeästi vähemmän ”opps” kiroitus ja vastaavia testiajossa silmille pomppivia virheitä • Muistikokoelmien LINQ kyselyt • Järkevä raja tietokannan ja muistin välillä tehtäviin operaatioihin • Kannasta ei tarvitse väkisin tuottaa mahdollisimman helppokäyttöistä dataa

  10. LINQ to SQL käytännössä • Käyttöönotto käynnissä olevaan projektiin • Tietokantatietoinen älykäs oliorakenne • Työskentelyä tehostavat apuvälineet

  11. Olio-relaatiomuunnos • Todelliset hyödyt realisoituvat oliorakenteen kautta • LINQ on arvokas itsessään, LINQ to SQL erityisesti olio-relaatiomuunnoksen takia • ”Helmiä sioille”, jos sovellus täytetään upotetun SQL:n sijasta upotetulla LINQ:lla

  12. Suuren oliojuhlan tuntua... • Oliolinkkien lazy loading ja relaatiot  Tietokanta on kuten ”ääretön” jaettu muisti, jonka muutokset viedään transaktioissa • ... Kunhan tiedostaa mitä taustalla tapahtuu • Esim. ”leppoisat” domainrajat ylittävät haut (esim muistikokoelman ja SQL kokoelman joinit) ovat helposti turhankin leppoisia...

  13. Ooh – lii – oo... • Loogisesti olioihin sijoittuva toteutus • Muutama rivi koodia oikeassa oliossa, joka voi viitata linkkien yli tarvittuun dataan • Ei luokkarajojen yli käpistelyä • Varmistaa myös, että saman asian toteutus useampaan kertaan minimoituu • Tarvekohtaiset kokonaisuudet extension metodien ominta aluetta

  14. Järkevät rajaukset • Esim. Asiakas  Tarjouksia  Tuotteita • Ei toteuteta Asiakas – luokkaan tuotteita hakevia osuuksia, vaan toteutetaan ne tarjoukseen. Asiakas kyselee tarjouksiltaan. • Ydintoteutus yleiseen LINQ malliin, esim. Raportointi ja käyttöliittymäkohtaiset osuudet extension metodeilla • Extension metodit näkyvät kuten luokan metodit, kunhan assembly viite ja namespace ovat kohdallaan

  15. Oliokohtaiset yleiset rutiinit • Yleiset haut kannattaa toteuttaa olioihin: public static Order GetOrder(long id) { return (from order in DBS.ActiveCTX.Orders where order.ID == id select order).FirstOrDefault(); } • Luonnit keskitetysti staattisilla Create(parent, requiredInfo) rakenteilla • Varmistaa myös uusien olioiden liittämisen datakontekstiin • LINQ datakontekstin partial kutsut mm: • OnCreated, OnLoaded, OnValidate

  16. ... Oliokohtaiset rutiinit • Omat laajennukset, esim IPreValidate • Kutsutaan SubmitChanges() yliajossa • Ei samoja rajoituksia kuin OnValidate:lla • Älykkäät cascade - operaatiot • Kaikki operaatiot olioilla, ei ID:illä • Relaatiot ja linkit toimivat myös uusien olioiden osalta • Validoinnit toimivat aukottomasti oliotasolla • ID viittaukset vain kun suorituskyky sitä vaatii

  17. Keskitetty DataContext • Edellytys, jotta oliot voivat viitata samaan kontekstiin • Kaikki oliotasolla tapahtuvat muutokset/lisäykset kohdistuvat samaan kontekstiin ja transaktioon • Windows Clientissä static • Säikeillä kontrolloitu ja/tai [ThreadStatic] • ASP.NET:ssä HttpContext.Current (eli request) kohtainen • Static Dictionary<HttpContext, DataContext> (säiekontrolloitu access) • BeginRequest alustaa, EndRequest siivoaa pois

  18. Kuoppien väistelyä... • Esim. isojen relaatioiden kanssa tarkkana; tulevat muistiin kerralla (tosin vain kerran) • Hyvä profiloida sovellusta, myös muistikokoelmien LINQ kutsujen osalta • Veikkaus että SQL Server vNext syö jo LINQ luokat konteksteineen suoraan palvelimeen • LINQ oliot eivät ole normaalisti serialisoituvia • ToJSON() voidaan toteuttaa extensiona • Vaatii reflektiolla assosiaatioiden pätkimistä

  19. LINQ to SQL käytännössä • Käyttöönotto käynnissä olevaan projektiin • Tietokantatietoinen älykäs oliorakenne • Työskentelyä tehostavat apuvälineet

  20. Tietokannan päivitys - Demo • LINQ mallin luonti suoraan XML:ään • Indeksien ja foreign key ehtojen tarkennukset partial luokkien attribuuteilla • Tietokannan rakenteen päivitys suoraan LINQ mallista

More Related