Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

ADO.NET Entity Framework vs Linq2SQL

[es] :: .NET :: ADO.NET Entity Framework vs Linq2SQL

[ Pregleda: 2724 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon ADO.NET Entity Framework vs Linq2SQL01.09.2010. u 08:10 - pre 165 meseci
[izdvojeno iz teme o singleton patternu]

Citat:
branimir.ts: @Toxy again - nemoj da koristis Linq2Sql i sam Microsoft je digao ruke od te tehnologije, kreni od EF :)


I btw, toxy, slobodno koristi Linq2SQL ako ti resava problem to je sasvim validan IEnumerable<T> strong typed model koji radi optimalno sa MSSQL servrom. L2S je tu i ne ide nigde iz frameworka (isto kao i nekadasnji datasets), to sto ga ne razvijaju dalje ne znaci da je deprecated vec da je mature proizvod kome vise ne treba dorade.


[Ovu poruku je menjao mmix dana 28.09.2010. u 12:00 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL01.09.2010. u 15:53 - pre 165 meseci
Hm, ne vidim zašto bi LINQ to SQL ispao iz upotrebe.
Nisam ne znam kakav poznavalac, ali Entity framework je baziran na ADO.NET Provajderu i ima svoju namenu.
LINQ To SQL je nešto drugačiji i ima svojih prednosti i slabosti u odnosu na Entity.
Logično mi je da se koristi ono što za određeni projekat više odgovara, obzirom da su oba pogodna za odgovarajuće stvari. Drugim rečima, ne isključuju jedan drugi, kao što bi to bio slučaj sa recimo Entity frameworkom i "matorim" ADO.NETom.
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-a-4.sezampro.rs.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL01.09.2010. u 21:13 - pre 165 meseci
@mmix - slazem se za generalizaciju u vezi patherna
@Toxy - svaka tehnologija je dobra dok god ti zavrsava posao.

@mmix
Citat:
Linq2SQL ako ti resava problem to je sasvim validan IEnumerable<T> strong typed model koji radi optimalno sa MSSQL servrom.

Pusti profiler na MSSQL-u pa ces videti kako izgleda - da ga nazovem, "masinski SQL :)" koji generise linq2sql. Na EF makar mozes da stimujes ono sto se zaista izvrsava pa tako od obicnog upita "SELECT * FROM Product" neces imati
select a1, a2,b5,
(select c1 from g2 where g2.ProductId = a1.Id),
(select c2 from g2 where g2.ProductId = a1.Id),
(select c2 from g2 where g2.ProductId = a1.Id),
(select c1 from g2 where g2.ProductId = a1.Id),
(select c1 from g2 where g2.ProductId = a1.Id),
from Product inner join Category inner join (select top1 from ) etc etc....

Naravno, neko pametan iz MS-a se setio da linq2sql po default-u bude lazy ali da svaki put ucitava u "strongly typed" objekat sve njegove relacione objekte... Linq2Sql je dobar za skolske primere mozda, da neko ko ne zna kako to radi moze da napravi brzo nesto sto na duze staze sigurno nece valjati.

Meni je licno interesantan EF i nove opcije poput code first development, convention over configuration, sve ono sto je jos 2003 trebalo da postoji.

Elem, opet to nije topic, otvorite temu Linq2sql ili EF pa mozemo da pricamo o tome, jer odosmo bestraga od teme :)


 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL02.09.2010. u 08:44 - pre 165 meseci
Nista ti ne brini, razdvojicu teme

Ajd bas da vidim koji L2S query generise taj SQL koji si dao? Karikiras covece, L2S mapira linq konstrukt u SQL query i to radi veoma optimalno i na najbolji moguci nacin prilagodjen samom SQL serveru i bez dodatnih nivoa apstrakcije koju EF mora da uradi (a koje placas performansama). Tebi neki od tih SQL izraza mogu da deluju rogobatno ali ako na SQL serveru pogledas execution plan za njih videces da su najjednostavnija moguca resenja za to sto si trazio, sam tekst sql query-a nije indikator nicega. Sad ako si ti napisao uzasno los LINQ query od kojeg ni L2S optimizator ne moze da te spasi onda si sam kriv . Jedina prednost koju EF ima nad L2S pri koriscenju na SQL serveru je ORM mapper, sve ostalo je sitna riba i dodatna apstrakcija za MVC lozace. Za rapid development i klasican tiered development L2S je jos uvek zakon, moze facama iz ado.net-a to da se ne svidja jer hoce da guraju EF, ali taj deo je jaci od njih

Da se razumemo nije EF los, daleko od toga, ali nije mirodjija za svaku corbu samo zato sto je latest-and-greatest iz MSa. Tek sada u drugoj je EF doveden u neku PRISTOJNU meru da moze da se koristi normalno (bagovi, POCO, auto-increment) i cini mi se da su poradili malo na performansama jer su u starom EFu one bile ocajne (mada jos nisam video nove paralelne testove), ali da si tada pitao bilo koga iz ado.net-a bilo je "ili EF ili smrt secom". Kad se par puta budes stvarno opekao na njihove marketinske gluposti i trpeo posledice onda ces i trezvenije pristupati svemu novom sto izadje iz MSa i gledaces da prvo razgrnes sav BS u koji oni pakuju svoje proizvode zadnjih godina. Sto se tice code-first, mogu samo da kazem haha, nece skoro doci taj dan kad ce developeri umesto arhitekata graditi baze jer nije baza samo sema tabela i polja, i to narocito na kompleksnijim projektima gde EF konacno ima svoj teren naspram L2Sa

Al ajde, da ne bude sve crno, skidam kapu za convention before configuration, to je zaista od velike pomoci kad treba nesto da se menja na bazi, u poredjenju sa svim ostalim mehanizmima syncovanja ovaj je definitivno najbrzi, mada realno mi se ne svidja njihov pristup promenama. Po njima ti bi trebao da zadrzis naming u entity klasama a da promenu recimo imena tabele ili kolona izvedem promenom mapiranja kroz OnModelCreating. Sem nekih retkih, retkih situacija (recimo dalja serijalizacija POCO objekata) ne vidim zasto bi dodjavola to radio kad refaktoring resava problem.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-4.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL17.09.2010. u 22:25 - pre 164 meseci

Citat:
L2S mapira linq konstrukt u SQL query i to radi veoma optimalno i na najbolji moguci nacin prilagodjen samom SQL serveru


Ako koza laze, rog ne laze :)

http://weblogs.asp.net/scottgu...t-with-entity-framework-4.aspx

Some of the big improvements in EF4 include:

* Lazy Loading Support: You can now load sub-objects of a model on demand instead of loading them up front.
* Better SQL Generation and SPROC support: EF4 executes better SQL, and includes ....
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL18.09.2010. u 14:50 - pre 164 meseci
Haha, ako je Scott Guthrie rog, ko je onda koza?

Lazy loading je od starta u LINQ2SQLu, a za ovo drugo cu da verujem kad budem video . Svaka cast SCottGu'u ali on reklamira svoj proizvod, uostalom "better" je lepa igra reci, better od cega? . EF4 pati od te svoje prepodobne misije da bude odvojen od specificne implementacije baze u pozadini i to ih je upropastilo u prvoj iteraciji. Ako su ispravili odlicno, ali to i dalje ne negira cinjenicu da je L2S u startu bio nenadje*iv za konkretnu implementaciju MS SQL Servera.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-1.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL18.09.2010. u 22:17 - pre 164 meseci
@mmix
Uz sav respekt, evo obrazlozenja

Citat:
Ajd bas da vidim koji L2S query generise taj SQL koji si dao? Karikiras covece, L2S mapira linq konstrukt u SQL query i to radi veoma optimalno i na najbolji moguci nacin


Odnosi se na EF koji se isporucuje uz ASP NET 3.5 SP1

Code:

public Aerodrom GetAerodromById(int id)
        {

            IQueryable<Aerodrom> aerodrom = DB3.Aerodrom.
                              Where(a => a.AerodromID.Equals(id));
                        
        ...    
        }
                              


proizvodi sledece:

Code:

exec sp_executesql N'SELECT 
[Project1].[C1] AS [C1]
FROM   ( SELECT cast(1 as bit) AS X ) AS [SingleRowTable1]
LEFT OUTER JOIN  (SELECT 
    [GroupBy1].[A1] AS [C1]
    FROM ( SELECT 
        COUNT(cast(1 as bit)) AS [A1]
        FROM [dbo].[Aerodrom] AS [Extent1]
        WHERE [Extent1].[AerodromID] = @p__linq__13
    )  AS [GroupBy1] ) AS [Project1] ON 1 = 1',N'@p__linq__13 int',@p__linq__13=1


Pa zar je ovo optimizovano za rad sa MSSQL serverom na "najbolji moguci nacin"? Da li je ovo adekvatna zamena za SELECT * FROM Aerodrom WHERE AerodromID = @id ?
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL19.09.2010. u 21:45 - pre 164 meseci
Umal da me zbunis nabrzaka Ti u stvari dokazujes ono sto sam ja rekao, da je EF (bar onaj prvi) uzasan Ovaj SQL je stvarno uzasavajuci i ako je to norma i za novi EF mislim da cu se zadrzati na L2S i llblgen-u.

Linq2SQL (L2S) ti nikad ne bi generisao takav SQL L2S bi ti upravo generisao "SELECT <fieldlist> FROM Aerodrom WHERE AerodromID = @t1" i parametar t1 = id. Hoces primer?


Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL20.09.2010. u 10:21 - pre 164 meseci
Evo, zakacen ti je primer, uporedo isti model za l2s i ef, u projektu je sql skripta da ti napravi bazu.

Rezultat:

Testiranje Linq2SQL:
----------------------------------------------------------------------------
SELECT [t0].[AerodromID], [t0].[Polje2]
FROM [dbo].[Aerodrom] AS [t0]
WHERE [t0].[AerodromID] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.1

----------------------------------------------------------------------------
Potroseno vreme: 00:00:02.8831649

Testiranje ADO.NET EF:
----------------------------------------------------------------------------
SELECT
[Extent1].[AerodromID] AS [AerodromID],
[Extent1].[Polje2] AS [Polje2]
FROM [dbo].[Aerodrom] AS [Extent1]
WHERE 1 = [Extent1].[AerodromID]
----------------------------------------------------------------------------
Potroseno vreme: 00:00:04.9352823


Dakle, nigde (cak ni u EFu) nema tih glista koje si ti naveo, mozda je tvoj model jednostavno neprilagodjen svrsi u koju si ga iskoristio (a mozda je i novi ef to popravio). Isto primet da je EF 50% sporiji od L2Sa. Jednostavno EF ima previse if/then/else branchovanju u sebi da pokrije sve moguce provajdere i mora da prodje kroz object mapper makar mapiranje bilo 1-1 i tu nema leba, MORA da bude sporiji od L2Sa.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
Prikačeni fajlovi
 
Odgovor na temu

toxi_programer
Nemanja Todić
Beograd

Član broj: 104396
Poruke: 464
*.adsl-a-1.sezampro.yu.

Sajt: www.articles411.com


+8 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL20.09.2010. u 18:15 - pre 164 meseci
Citat:
mmix:
Linq2SQL (L2S) ti nikad ne bi generisao takav SQL L2S bi ti upravo generisao "SELECT <fieldlist> FROM Aerodrom WHERE AerodromID = @t1" i parametar t1 = id.


Čuo sam negde da kada je upit prosleđen sa parametrima( iliti ovi upiti što generiše l2s) da MsSQL kešira takve upite, ili šta već, te se naredno izvršavanje upita odrađuje brže. Jel to tačno?



Like za sajber boje u prethodnom postu
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-a-1.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL25.09.2010. u 14:28 - pre 164 meseci
@mmix
Hvala na uporednim testovima koje si napravio, u medjuvremenu da bismo imali kompletniju sliku dopunio sam projekat sa jos 3 testa tako da sada imamo pokriven EF u svim varijantama. U main-u postoji sledece
Code:

            Do__ClassicDataReaderTest();
            Do__Linq2SqlTest();
            Do__EntitySQLObjectQueryTest();
            Do__EntitySQLEntityClientTest();
            Do__Linq2EntityTest();


kao i rezultate :

Code:

Testiranje klasicnog Data reader-a:
----------------------------------------------------------------------------
select * from Aerodrom where AerodromID=1
----------------------------------------------------------------------------
Potroseno vreme: 00:00:00.4531250

Testiranje Linq2SQL:
----------------------------------------------------------------------------
SELECT [t0].[AerodromID], [t0].[Polje2]
FROM [dbo].[Aerodrom] AS [t0]
WHERE [t0].[AerodromID] = @p0
-- @p0: Input Int (Size = -1; Prec = 0; Scale = 0) [1]
-- Context: SqlProvider(Sql2005) Model: AttributedMetaModel Build: 4.0.30319.1
----------------------------------------------------------------------------
Potroseno vreme: 00:00:01.2812500

Testiranje ADO.NET EF Entity SQL ObjectQuery:
----------------------------------------------------------------------------
SELECT 
[Extent1].[AerodromID] AS [AerodromID], 
[Extent1].[Polje2] AS [Polje2]
FROM [dbo].[Aerodrom] AS [Extent1]
WHERE 1 = [Extent1].[AerodromID]
----------------------------------------------------------------------------
Potroseno vreme: 00:00:02.9218750


Testiranje ADO.NET EF Entity SQL EntityClient:
----------------------------------------------------------------------------
SELECT 
[Extent1].[AerodromID] AS [AerodromID], 
[Extent1].[Polje2] AS [Polje2]
FROM [dbo].[Aerodrom] AS [Extent1]
WHERE [Extent1].[AerodromID] = 1
----------------------------------------------------------------------------
[b]Potroseno vreme: 00:00:00.6718750[/b]


Testiranje ADO.NET EF Linq2Entities:
----------------------------------------------------------------------------
SELECT 
[Extent1].[AerodromID] AS [AerodromID], 
[Extent1].[Polje2] AS [Polje2]
FROM [dbo].[Aerodrom] AS [Extent1]
WHERE [Extent1].[AerodromID] = 1
----------------------------------------------------------------------------
Potroseno vreme: 00:00:02.5312500


U principu Do__EntitySQLObjectQueryTest() koji si napravio je ustvari isto sto i Do__Linq2EntityTest(); samo ima nepotreban overhead (castovanje IQueryable u ObjectQuery) sto se i vidi u rezultatima.

Citat:
Jednostavno EF ima previse if/then/else branchovanju u sebi da pokrije sve moguce provajdere i mora da prodje kroz object mapper makar mapiranje bilo 1-1 i tu nema leba, MORA da bude sporiji od L2Sa.


Pogledaj rezultate testa EF Entity SQL EntityClient :) Ovo zasigurno govori drugacije:)

Elem, evo projekta u prilogu, pa mozemo da pricamo dalje o toj temi.
Prikačeni fajlovi
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL28.09.2010. u 10:11 - pre 164 meseci
Ok, za pocetak neke stvari. IQueryable<T> nad EF objektom je ObjectQuery<T> objekat ciji interfejs IQueryable<T> ti dobijes kao rezultat ekstenzije. Dakle, zaustavi se nakon sto kreiras aerodrom IQueryable i ispitaj aerodromi i videces da je tipa:

System.Linq.IQueryable<SampleL2SvsEF.EF.Aerodrom> {System.Data.Objects.ObjectQuery<SampleL2SvsEF.EF.Aerodrom>}

Samim tim castovanje nije kroz custom operator (koji bi mogao da napravi penale) vec direktno i u asembleru se svodi svodi se na dodelu/kopiranje reference:

Code:
//                var aerodrom2 = (ObjectQuery<EF.Aerodrom>)aerodromiqueryable;
000002f4  lea         rcx,[000B13E0h]
000002fb  mov         rdx,qword ptr [rsp+38h] 
00000300  call        FFFFFFFFF33EE400 
00000305  mov         qword ptr [rsp+40h],rax

REG: RAX (posle call) = 00000000028250A8 RDX (pre call) = 00000000028250A8


Tako da slobodno mozes da castujes EF query-e u ObjectQuery da bi dobio njegove metode bez performance penala. To je jedna od lepih osobina i osnova univerzalnosti LINQa

Takodje, LINQ query i ekstenzije su jedno te isto. Tj sledeca tri koda generisu isti IL

Code (csharp):
var ef = new EF.nasabazaEntities();
var x1 = from a in ef.Aerodroms.Where(c => c.AerodromID == id) select a;
var x2 = from a in ef.Aerodroms where a.AerodromID == id select a;
var x3 = ef.Aerodroms.Where(c => c.AerodromID == id);


kad disasm ovaj kod dobijes sledece jer je IL identican
Code (csharp):
nasabazaEntities ef = new nasabazaEntities();
IQueryable<Aerodrom> x1 = from a in ef.Aerodroms where a.AerodromID == 1 select a;
IQueryable<Aerodrom> x2 = from a in ef.Aerodroms where a.AerodromID == 1 select a;
IQueryable<Aerodrom> x3 = from c in ef.Aerodroms where c.AerodromID == 1 select c;


Tako da u sve svrhe i primene Do__Linq2EntityTest i Do__EntitySQLObjectQueryTest su jedno te isto i zato i dobijas priblizno iste rezultate. Jedini razlog zbog kojeg sam ga castovao je upravo da bi izvukao SQL skriptu.

---------------------------------------------------------------------------
E sad, sto se tice EntityCommand-a

To je varanje, Entity command je untyped mehanizam koji uzima svoju funkcionalnost iz System.Data.Common.DbCommand. Dakle jedino sto EF tu ucestvuje je da svojim provajderom generise DB (SQL) skriptu iz modela i da pruzi informaciju o konkretnoj DB konekciji. Ono sto dobijes na kraju u EntityResult je imlpementacija Common.DBDataReadera-a koji ti vraca flat untyped recordset Common.DbDataRecord objekata. Samim tim pati od istih falinki od kojih pati i klasicni SlqlDataReader pristup.

Dakle, nadam se da je sad ociglednije zasto je brzi. Brzi je zato sto nema drugi deo jednacine, rezultati ne idu nazad u EF da se mapiraju u typed objekte i da se nad njima izvrsi integrity provera. Zato ga ne mozemo porediti sa L2S i "punim" EF pristupom jer nisu u istoj kategoriji (typed vs untyped). Ako ga mozemo porediti sa necim onda je to sa klasicnim data readerom od kojeg je opet 50% sporiji.

Prema tome u kateogriji "MSSQL, typed, no ORM", sto je priblizno i najcesca primena, L2S i dalje sije konkurenciju.


[Ovu poruku je menjao mmix dana 28.09.2010. u 12:03 GMT+1]
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.zaslon-telecom.si.



+14 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL29.09.2010. u 11:00 - pre 164 meseci
Ok, koje bi onda objektivno bile negativne posledice L2SQL u odnosu na EF, osim pomenutog lockinga na MSSQL?
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL29.09.2010. u 11:34 - pre 164 meseci
Ima razlika, evo recimo ovaj link lepo objasnjava zasto jedno zasto drugo.
http://social.msdn.microsoft.c...7e-9c70-4970-93e2-dbc8636eb321

Ne bih da se pomisli da sam ja nesto hejterski nastrojen prema EF-u, nisam i mislim da ce posle neke iteracije postati dobar i kvalitetan mainstream proizvod kad se ispeglaju sve gluposti i kad malo olade sa tim poliglotstvom, samo me iznervira malo ta jurnjava za "latest and greatest". E izasao ADO.NET EF, brisi sve projekte i menjaj kod koji radi i ubuduce sve da bude EF, to sto ne ume da se izbori sa autoidentity poljem, e jbg niko nije savrsen :(. Mojne me toga, ajd prvo da razmislimo dal je to tvarno bolje i dal nam uopste i treba pre nego pocupamo kablove.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-a-1.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL29.09.2010. u 17:20 - pre 164 meseci
@mmix
Citat:

E sad, sto se tice EntityCommand-a
To je varanje, Entity command je untyped mehanizam koji uzima svoju funkcionalnost iz System.Data.Common.DbCommand. Dakle jedino sto EF tu ucestvuje je da svojim provajderom generise DB (SQL) skriptu iz modela i da pruzi informaciju o konkretnoj DB konekciji. Ono sto dobijes na kraju u EntityResult je imlpementacija Common.DBDataReadera-a koji ti vraca flat untyped recordset Common.DbDataRecord objekata. Samim tim pati od istih falinki od kojih pati i klasicni SlqlDataReader pristup.
Dakle, nadam se da je sad ociglednije zasto je brzi. Brzi je zato sto nema drugi deo jednacine, rezultati ne idu nazad u EF da se mapiraju u typed objekte i da se nad njima izvrsi integrity provera. Zato ga ne mozemo porediti sa L2S i "punim" EF pristupom jer nisu u istoj kategoriji (typed vs untyped). Ako ga mozemo porediti sa necim onda je to sa klasicnim data readerom od kojeg je opet 50% sporiji.


Hajde da zanemarimo EntityCommand za sada i da se vratimo na ObjectQuery :)

U prilogu je dopunjen projekat koji vraca ObjectQuery<T> i koji ima "drugi deo jednacine" :) (Do__EFObjectQueryTest_NoLinqExtension)

Rezultati:
Code:

Testiranje klasicnog Data reader-a:
----------------------------------------------------------------------------
Potroseno vreme: 00:00:00.8906250
----------------------------------------------------------------------------

Testiranje Linq2SQL:
----------------------------------------------------------------------------
Potroseno vreme: 00:00:01.2812500
----------------------------------------------------------------------------

Testiranje ADO.NET EF ObjectQuery - *sa link ekstenzijom*:
----------------------------------------------------------------------------
Potroseno vreme: 00:00:03.6875000
----------------------------------------------------------------------------

Testiranje ADO.NET EF Entity SQL EntityClient:
----------------------------------------------------------------------------
Potroseno vreme: 00:00:00.6406250
----------------------------------------------------------------------------

Testiranje ADO.NET EF Linq2Entities:
----------------------------------------------------------------------------
Potroseno vreme: 00:00:02.5781250
----------------------------------------------------------------------------

Testiranje ADO.NET EF ObjectQuery - *bez link ekstenzije*:
----------------------------------------------------------------------------
Potroseno vreme: 00:00:00.5468750
----------------------------------------------------------------------------


Citat:
Prema tome u kateogriji "MSSQL, typed, no ORM", sto je priblizno i najcesca primena, L2S i dalje sije konkurenciju.


Ovaj test govori suprotno - cak i najgora verzija EF koju su isporucili uz asp net 3.5 sp1 je za oko 50% brza od l2S upita (ako se koristi bez linq extenzije).

Moram da napomenem da testiranje koje radimo nije sveobuhvatno, testiramo samo selecte - interesantno bi bilo pogledati rezultate inserta
u kombinaciji sa update-ovima. Mislim da ce se tek na takvim testovima EF pokazati daleko nadmocnijim od svog prethodnika :)
- ali da ne pricam unapred :)

Prikačeni fajlovi
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL29.09.2010. u 17:56 - pre 164 meseci
E bas me mucis Ajde pogledacu sutra, al vec sad imam zesce rezerve prema tom rezultatu (tj svakom rezultatu koji tvrdi da je brzi od SqlDataReadera)
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

branimir.ts
Beograd

Član broj: 56661
Poruke: 127
*.adsl-a-1.sezampro.yu.

Sajt: www.geocities.com/brankob..


Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL29.09.2010. u 18:36 - pre 164 meseci
@mmix
:) Nemoj da te muce nove tehnologije, pogotovu ne najnovije koje izadju iz MS-a, i ja ih uzimam sa rezervom... :)
Data reader u ovom testu nema connection pooling kao u prethodnom (konekcija se otvara u svakoj od 1000 iteracija) - zato su ovakvi rezultati

To i dalje nema veze sa posednjim pridodatim testom, dok se ti uveris za EF, pokusacu da napravim paralelne testove za insert/ update operacije ...
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.dynamic.isp.telekom.rs.



+14 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL29.09.2010. u 23:40 - pre 164 meseci
Ne bih da solim corbu, al' kad vec testirate dajte malo veci uzorak od "select where id", npr. AdventureWorks ili sl., razlike bi trebalo da budu daleko ociglednije na vecem uzorku. I dalje je pitanje da li je razlika u brzini Delay*RecordCount ili Delay+RecordCount, tj. mozda kod svake tehnologije postoji neki fiksan vremenski trosak koji ne zavisi od broja recorda.
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6041



+4631 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL30.09.2010. u 09:58 - pre 164 meseci
Pa realno trebalo bi napraviti i neku primenu ORMa u EFu pa videti i cost toga. Nista meni to nije problem da napravim sem vremena Ajde ako hoce jos neko da se ukljuci pa da napravimo neki benchmarking tool.
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

Boris B.
Ljubljana

Član broj: 213615
Poruke: 286
*.dynamic.isp.telekom.rs.



+14 Profil

icon Re: ADO.NET Entity Framework vs Linq2SQL30.09.2010. u 22:40 - pre 164 meseci
Ja sam za apsolutno sve u korist cackanja po core tehnologijama ali sam trenutno jako tanak sa vremenom, pored jedne gargantuovske WPF aplikacije na poslu i dva Android side-projekta nosim laptop cak i na WC solju (bukvalno).
Sta bi ti trebalo za taj benchmarking tool, tj. kako si to zamislio?
if it walks like a duck and quacks like a duck, it could be a dragon doing a duck
impersonation.
 
Odgovor na temu

[es] :: .NET :: ADO.NET Entity Framework vs Linq2SQL

[ Pregleda: 2724 | Odgovora: 19 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.