LINQ_TO_SQL.pdf

(515 KB) Pobierz
297398858 UNPDF
LINQ TO SQL wdużymkróciejettozintegrowanyjzykzapytaopozwalającynamapowanie
relacyjnych baz danych na model obiektowy.
Zanimktokolwiekpotanowiużydtegowwoimprojekcie,należyzaznaczydżemożnakorzytadz
tegowyłączniedobazirmyMS. Pozotałebazydanych, bdziemożnaobłużydzapomocądblinq
Jettonarzdziezewntrznedotpnena stronie:
Nadzieodzisiejszy DBLinq oiągnłowerje017 a komentarze i opisywane problemy raczej nie
zachcajądotoowaniawwikzychprojektach. Docelowo ma ono obsługiwadbazyPotgreSQL,
MySQL oraz Oracle Jeżeli już zdecydowalimy i na jedyny „łuzny” wybór producenta,
zastanówmyiktórejzbazpowinnimyużydMożliwocimamytrzy
MSQLServerwwerjiExprelubpełnej,
Baza danych MS Access,
MsSQLServerCE
Najbardziej intereującą opcją, z punktu widzenia programity aplikacji dektopowych, jet
oczywiciemożliwoddołączeniacałejbazynajlepiejwormiejednegoplikudoaplikacji Wybór
trzeciej opcji, pozwoli na realizacjepowyżzegowymagania
MsSQL Server CE –wady
Przede wzytkim wydajnod amej bazy, która chyba jet pozbawiona jakichkolwiek
optymalizacji. Wprowadzeniemodyikacji,lubprzezukiwanie,trwazdecydowaniedłużejniż
w bazach PostgreSQL, czy nawet MySQL Lite.
Przekroczenie2MBdanychpowodujeznacznypadekwydajnociRozwiązaniemmożebyd
rozbicie bazy np. na cztery mniejsze bazy.
Wykonanie mapowaniawymagawykorzytanianarzdziakonolowego
Ograniczenie8KBnawierzDużawadawprzypadkuerializowanychobiektówMożliwod
obejciapoprzezdzieleniuobiektunakilkapod elementów
Kurs LINQ TO SQL rozpocznijmy od stworzenia nowego projektu –aplikacjikonolowejCałod
projektu który pozwoli zapoznad i z opiywanymi rzeczami znajdzie i pod adreem
http://czortcode.googlecode.com/files/LinqKurs.zip Po stworzeniu nowego projektu musimy
utworzydnowyplikbazydanychZdotpnychopcjinależywybradLocalDatabaeinadadnazwnp
BazaDanych.sdf.
PoutworzeniubazyViualbdziechciałtworzydplikDataSet,klikamycancellubuuwamypo
wygenerowaniuZaprezentowanezachwilrozwiązanianieąidealnymrozwiązaniemprojektowym,
mają jedynie pokazad pewne unkcjonalnoci LINQ Zacznijmy od tworzenia tabeli w bazie
„BazaDanychd”
Bdziemychcieliprzechowywadwniejprotyobiektooba
Id
Imie
Nazwisko
Klikamydwarazynaplikbazy,powinnootworzydioknojakponiżejKlikamy prawym na Tables i
wybieramy CreateTable
Tworzymytabele,zautomatycznąinkrementacjąwartocikluczagłównego
297398858.003.png 297398858.004.png
Za
autoinkrementacjodpowiadapoleidentityutawionenaTrueKolejnaciekawotkąjetwartod
Allows Nulls. Znaczenia chybanietrzebatłumaczyd,wynikanatomiatztegopewnaniedogodnod
Niemaniejawnegorzutowaniapomidzy„ string ”a„ string? ”Wartodtyputring? różniitymod
normalnegotektu,tymżemożeprzyjądwartodnullJeżelitoujeiwartocitypunullable,
doradzałbym toowad je konekwentnie Sprawdzanie, konwerja itd jet kłopotliwe Po
zatwierdzeniutabeli,powinnimymóczobaczydjąwerwerexplorerzeKlikamynatabeliooba
prawymiwybieramyopcjeShowTableDataOczywicieniemawniejdanych, ale w tym miejscu
możnajeuzupełnid
Pododaniukilkuwierzy,przechodzimydoobługibazyzpoziomukodu Potrzebujemy przede
wzytkimplikumapowaobazyMaonrozzerzeniedbml ijetontworzonyprzeznarzdzie
SQLMETLbymócinimpoługiwadmuimydodadodpowiedniącieżk,dozmiennejPTHw
ytemie U mnie znajduje i ono w katalogu „C:\Program Files\Microsoft
SDKs\Windows\v6.0A\bin\”
SQLMETLużywanyjetzkonoli,jakopierwzyparametrpodajemynazwbazy(w naszym
przypadku BazaDanych.sdf),oraznazwgenerowanegopliku,wktórymznajdąimapowania (w
297398858.005.png 297398858.006.png
przykładziedrugi parametr to /dbml:PlikMapowan.dbml). Po potwierdzeniu powinnimyzobaczyd
tekjakponiżej
Plikzotałwygenerowany,kolejnymkrokiemjetdołączeniedoprojektuWtymcelunależykliknąd
prawymnaprojekcieidodadExisting Item (trzeba dodatkowo wybrad opcjaby pokazywałwzytkie
typyplików). Po otworzeniugopowinnimyzobaczyd
Otatniąrzecząjakąnależywykonadjetnapianiekodudoobługi
//Tworzymy obiekt typu osoba (klasa wygenerowana przez sqlmetal), id
generowane automatycznie
Osoba nowaOsoba = new Osoba { Imie = "Zbyszko" , Nazwisko = "zBogdańca" };
//Nawiązujemy połączenie z bazą (nazwa klasy jest taka sama jak nazwa pliku
bazy)
BazaDanych polaczenieZBaza = new BazaDanych ( "BazaDanych.sdf" );
//wstawienie obiektu do bazy
polaczenieZBaza.Osoba.InsertOnSubmit(nowaOsoba);
polaczenieZBaza.SubmitChanges(); //zatwierdzenie zmian
Linq daje ogromnemożliwoci zewzgldu na woją elatycznodPoniżej przedtawiam kilka
poobównapobranieinormacjizbazydanych
//1 sposób
Console .WriteLine(polaczenieZBaza.Osoba.Where(
i => i.Imie.Contains( "Zbysz" )).First().Imie);
//2 sposób
Func < Osoba , bool > warOsoba = (tmpOsoba) =>
(tmpOsoba.Imie.Contains( "Zbysz" ));
List < Osoba > listaOs = polaczenieZBaza.Osoba.Where(warOsoba).ToList();
listaOs.ForEach( delegate ( Osoba tmp)
{
Console .WriteLine(tmp.Imie);
});
//3 sposób
var varOsoby = from os in polaczenieZBaza.Osoba select os;
297398858.001.png 297398858.002.png
Console .WriteLine(varOsoby.First().Imie);
Console .ReadKey();
Cztopojawiaikoniecznodrozzerzeniatakprzygotowanychkladodającnp. dodatkowy
konstruktor. Przyjrzyjmy iuważniewygenerowanemu plikowi PlikMapowan.dbmlSkładaionz
dwóchczci: PlikMapowan.dbml.layout oraz PlikMapowan.designer.cs, gdy w designerze klikniemy
na wygenerowanej klasie i wybierzemy opcje View Code zostanie utworzony trzeci plik
PlikMapowan.cs. WnimbdziemymoglirozzerzadimodyikowadklayJettomożliwedziki
oznaczeniu wszystkich wygenerowanych klas jako partial. W PlikMapowan.cs,znajdujeizkielet
klasy:
namespace LinqKurs
{
partial class Osoba
{
}
}
Możemy uzupełnidgoometodToStringktóramogłabyiprzydadwobiekcie
partial class Osoba
{
public override string ToString()
{
return Imie + "----" + Nazwisko;
}
}
Zgłoś jeśli naruszono regulamin