LINQ i ADO.NET

Za sada koristim ADO.NET za rad sa bazama i tu nema nekih problema. Nasao sam knjigu o LINQ na HR pa me zanima sto je u principu LINQ? Da li je to zamjena ili samo nadopuna za ADO.NET?

Pozdrav svima

[quote=“index-v”]Za sada koristim ADO.NET za rad sa bazama i tu nema nekih problema. Nasao sam knjigu o LINQ na HR pa me zanima sto je u principu LINQ? Da li je to zamjena ili samo nadopuna za ADO.NET?

Pozdrav svima[/quote]

Linq je dodatak.
ovdje je objašnjeno.

http://geekswithblogs.net/technetbytes/archive/2007/04/30/112129.aspx

ekipa je napravila ling za ostale baze.samo što ima bug-ova i ne radi kako treba.jedino radi kako treba za sql server.
prednost ovoga je da se možeš spojiti na bilo koju bazu koja je podržana, samo promjenom jednog parametra.
mana ovog je što je recimo 2-5 puta sporije nego ado.net.nadalje ako imaš query i spajaš se na 3 ili 4 različite baze, onda tvoj query nije optimiziran ni za jednu bazu i dobivaš nekvalitetu.
jer nemoguće je napisati jedan query da radi kvalitetno na nekoliko baza i da je optimiziran.a opet ako koristiš jednu bazu onda ti to ne treba.

drugo, da li valja ili ne valja , moje mišljenje je da ne valja, ja sam probao koristiti, ali mislim da mi se to baš ne sviđa.osobno to ne bi koristio.

Dakle, nista ne gubim ako i dalje radim sa ADO.NET-om?

[quote=“Lola”]Linq je dodatak.
ovdje je objašnjeno.

http://geekswithblogs.net/technetbytes/archive/2007/04/30/112129.aspx

ekipa je napravila ling za ostale baze.samo što ima bug-ova i ne radi kako treba.jedino radi kako treba za sql server.
prednost ovoga je da se možeš spojiti na bilo koju bazu koja je podržana, samo promjenom jednog parametra.
mana ovog je što je recimo 2-5 puta sporije nego ado.net.nadalje ako imaš query i spajaš se na 3 ili 4 različite baze, onda tvoj query nije optimiziran ni za jednu bazu i dobivaš nekvalitetu.
jer nemoguće je napisati jedan query da radi kvalitetno na nekoliko baza i da je optimiziran.a opet ako koristiš jednu bazu onda ti to ne treba.

drugo, da li valja ili ne valja , moje mišljenje je da ne valja, ja sam probao koristiti, ali mislim da mi se to baš ne sviđa.osobno to ne bi koristio.[/quote]

Meni se cini da ti taj tekst, na linku, nisi ni procitao, jer ovo sto si naveo nije primarna namjena LINQ

LINQ je napravljen da bi omogucio programerima da SQL naredbe pisu unutar C# koda, sto se moze primjetiti na linku, jer ima nekoliko primjara.

[quote=“nike”]Meni se cini da ti taj tekst, na linku, nisi ni procitao, jer ovo sto si naveo nije primarna namjena LINQ

LINQ je napravljen da bi omogucio programerima da SQL naredbe pisu unutar C# koda, sto se moze primjetiti na linku, jer ima nekoliko primjara.[/quote]

ali je jedna od namjena, a to da se sql piše unutar C# i sve ostalo ne želim komentirati, jer mislim da to nije nešto revolucionarno ili dobro.

i onda imaš mamlaza koji dođu raditi s bazom, a da nemaju pojma o bazi i sql i kako sve funkcionira i sve zeznu s tim Linq-om.

jer ipak da bi radio kao programer moraš dobro znati sql.
bez sql ne možeš raditi posao ili da ti query piše database developer.

a sve ostalo je …:sperm::sperm:

LINQ služi za pisanje SQL naredbi unutar programa nad raznim tipovima podataka, znači omogučava napredno filtriranje sortiranje itd… nad više tipova podataka (Dataset,XML,SQL…) trenutno ga još uvjek nisam koristio (možda par linija) ali vidjet ćemo :slight_smile:

LINQ su extension metode za rad sa kolekcijama, odnosno izradu upita na kolekcijama, uz koristenje lambda izraza. Prakticki funkcijsko programiranje. (Tehnicki, vecina implentacije se nalazi u Queryable i Enumerable klasama, koje implementiraju IQueryable i IEnumerable interfacove)

LINQ2SQL je microsoftov framework za mapiranje rezultata SQL upita na objekte, kao i prevođenje LINQ upita u SQL upite. Spada u skupinu ORM frameworka (object relational
Poanta je u tome da ce uskoro svi ORM alati koristiti LINQ za pisanje upita.
mapping).
Znaci, treba razlikovati LINQ i LINQ2SQL. LINQ je dosao u .NET 3, a LINQ2SQL u .NET 3.5.

Postoje jos i ostale implementacije LINQa na izvorima podataka, kao npr. LINQ2XML, LINQ2DataSet, LINQ2AD (active directory), LINQ2JSON, …

A sada iskustva iz prakse: ja jako dugo nisam napisao liniju SQLa, jer koristim ORM alate, i nadam se da vise nikada niti necu. Linq2Sql je jedan takav, a postoje i drugi (puno bolji, jaci, ali i kompleksniji). Jednostavan je za koristiti, ali radi samo sa MSSQL bazom. Microsoft je daljnje napore ulozio u Entity frameowork, sto je recimo “veci brat” od L2S. Ali L2S ce i dalje ostati u frameworku, samo se nece razvijati.

Ako zelis vidjeti primjere upotrebe pisanja LINQ upita za bazu podataka, skini si besplatni program LinqPad koji ima dosta sampleova u sebi.

recimo devart je podržao i druge baze.
obično svaki proizvđač baza uključi sve u drivere, neki odma neki s vremenom.

to je odličan alat za specifičnu primjenu. Najbolji je u situacijama kada trebaš dinamički kreirati upite. Upiti su čak odlično optimizirani, dodaš potrebne indexe na tablice i to je više manje sve.

u firmi smo LINQ to SQL to koristili za slaganje konfiguratora hardvera i pokazalo se kao dobra odluka

http://www.lcs.hr/content/configurator.aspx

[quote=“kezo”]Najbolji je u situacijama kada trebaš dinamički kreirati upite.[/quote]Nisam to uopće koristio, tako da samo pratim ovako komentare sa strane. Ovo je prvi konkretan problem za koji čujem da se LINQ-om dobro rješava. I to čest problem, za koji kvalitetno riješiti treba puno znanja i radnih sati.

Od skoro svih orm alata, linq2sql radi ponajbolje sql upite za mssql. Ali drugi orm-ovi moraju raditi i sa drugim bazama.

Sto se tice dinamickih upita, podrzani su i upotreba je dobro objasnjena ovdje:
http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx

U slucaju NHibernatea, ista stvar se moze izvesti dinamickim kreiranjem HQL upita (slaganje stringa, jel).
Kako LINQ u pozadini kreira stablo izraza (Expression Tree), moguce je dodati nove izraze u stablo (dodatne Where uvjete npr), prije samog okidanja translacije u SQL. Dovoljno je da metoda vraca IQueryable.
Pozivanje ToList() (ili ToArray()) nad upitom uvjek okida proces generiranja SQLa i requesta na bazu.

Iako je linq2sql kao orm alat jako ogranicen mogucnostima, jako je dobar za manje projekte koji nemaju kompleksnu domensku poligu (ili ne zahtjevaju POCO pristup). Istaknuo bi


, koji je najpopularniji programerski q&a sajt na svijetu, gdje se l2s pokazao dovoljno dobrim, ali i jako brzim!

Kod ORM alata cesto zna biti problem “hidratizacije” objekata, odnosno punjenja property-a sa vrijednostima iz rezultata SQL upita. Zbog brzine tu se mora koristiti dinamicko generiranje IL-a, ili cak fore sa dinamickim kreiranjem koda i njegovim kompajliranjem (tako radi NHibernate - a to je sigurno najbolji ORM za .NET)

… ako nekoga zanima koji SQL generira LINQ2SQL, imam jednu malo klasu koja se zakaci na L2S (na DataContext.Log), i ispisuje u Output prozoru Visual Studia generirane SQLove.
Posaljite PM ako nekome treba!

To ja STALNO koristim u izradi web stranica sa L2S, jer zbog Lazy loada moguce je generiranje prevelikog broja upita (Select N+1 problem)

Za vece i ozbiljnije projekte tu je punokrvni profiler:
http://l2sprof.com/


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja