Newsgroup: it.comp.dotnet
Titolo: [ADO.NET] E andiamo a cominciare: Linq o Entity Framework per accesso a DB?

Ho iniziato a guardare EF. E subito ho pensato a EF come un superset
che completa Linq to SQL. Poi mi imbatto in un articolo di Stefano
Mostarda in cui sostanzialmente si afferma che son due cose differenti.
E qui io, ignorante, non ci capisco piu' nulla.
In due parole: sono correlati o uno fa senza l'altro? Meglio puntare su
uno, sull'altro o su tutti e due?
Grazie!
-- 
Ciao!
Luca


Sono diversi anche se usano linq come strategia di base per le query.
Ci sono anche similitudini sul discorso context ma l'implementazione e 
il modo in cui procedere è molto differente.
Linq2Sql è stato un bell'esperimento ma a quanto pare non avrà futuro 
quindi la scelta tra i due è facile.
Ovviamente parliamo di EF4 perché le versioni precedenti non hanno 
senso.
In particolare io prediligo EF4 con l'aggiunta del "code first" che è 
attualmente in CTP4.
Leggiti questi articoli di scottgu:
http://weblogs.asp.net/scottgu/archive/2010/07/16/code-first-development-with-entity-framework-4.aspx
http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx
e naturalmente l'annuncio del team:
http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4announcement.aspx
-- 
Raffaele Rialdi  
http://www.iamraf.net
Weblog: 
http://blogs.ugidotnet.org/raffaele
Microsoft MVP profile 
https://mvp.support.microsoft.com/profile/raffaele
UGIdotNET - 
http://www.ugidotnet.org/

 uno, sull'altro o su tutti e due?
Innanzitutto, fossi Microsoft la versione 4.0 di EF l'avrei chiamata 
QualsiasiCosaMaNonEF x.0, giusto perché così ci sarebbe stata una maggiore 
probabilità di mitigare la comprensibile prevenzione di chi ne avesse 
provato le versioni precedenti non apprezzandole. Premetto poi che EF 4.0 
non l'ho toccata, ma non ho ragione di non credere a chi 
(
http://www.ayende.com/about-me.aspx
) lo ha fatto ad un certo livello 
(
http://efprof.com
) e dice 
(
http://ayende.com/blog/archive/2010/01/05/nhibernate-vs.-entity-framework-4.0.aspx
) 
che NHibernate continua (almeno per un certo tipo di sviluppatore, per 
capire veramente quale ORM fa per te, probabilmente ne dovrai provare di 
persona diversi!) ad essere un framework migliore (*).
Tra i commenti al citato post di Oren, uno abbastanza condivisibile è il 
primo di Frans Bouma (
http://weblogs.asp.net/fbouma/about.aspx
), di cui tra 
l'altro in passato sono stato felice cliente (
http://www.llblgen.com
), 
quando scrive:
"What EF has over NH is documentation, solid examples and a large stream of 
evangelists speaking at every developer conference there is and pumping out 
articles around the clock. The NH world never seemed to take that as 
important but it IS important: a developer is payed to solve a problem for 
his client, not to hunt down docs on blogs or other non-trivial places."
e poi anche:
"Not everyone is a .net rockstar, most of the developers out there barely 
know how to code their way through the day."
Infine, Linq to Sql è purtroppo un progetto morto e defunto, almeno dal 2008 
(
http://blogs.msdn.com/b/adonet/archive/2008/10/29/update-on-linq-to-sql-and-linq-to-entities-roadmap.aspx
), 
c'è da dire che il loro Linq provider era probabilmente il migliore 
disponibile da diversi punti di vista (chissà che Microsoft non si decida a 
rilasciarlo open source ...).
(*) caveat, il provider Linq di NHibernate non è certo il suo punto di forza 
(i.e. nel post citato Oren afferma che quello di EF 4.0 è migliore), anche 
se nella prossima versione (3.0, l'alpha è stata rilasciata a Luglio, ) ci 
si aspetta un notevole miglioramento.
-- 
ale
http://ale.riolo.co.uk
 

 uno, sull'altro o su tutti e due?
Innanzitutto, fossi Microsoft la versione 4.0 di EF l'avrei chiamata


 uno, sull'altro o su tutti e due?
Innanzitutto, fossi Microsoft la versione 4.0 di EF l'avrei chiamata 


 his client, not to hunt down docs on blogs or other non-trivial places."
Su questo non ci piove, nè voglio sminuire nHibernate anche perché non 
lo conosco abbastanza da giudicarlo.
Ci sono però due problemi molto pratici:
- la difficoltà per certe aziende di approvare un nuovo produttore di 
librerie. Il che è comprensibile perché magari ci sono già contratti di 
assistenza in essere).
- EF4 comincia ad essere interessante grazie alla CTP4 di cui parlavo e 
alla fluent api. Su questi la documentazione è prossima allo zero.
Sottolineo che EF4 CTP4 ha dei problemi ma sono noti e il team dice che 
sono in fase di risoluzione.
Ora va da se che se ti devi mettere a scrivere oggi un prodotto per 
terzi, l'ago della bilancia giustamente va verso un prodotto RTM e non 
su una CTP.
Ma devo pur fare una riflessione a livello tecnologico e l'uso di linq 
alla fine è la parte vincente di questi framework. Quindi se devo fare 
un investimento a lungo termine personalmente scelgo EF4 (e non dico 
che non potrei cambiare idea ...)
Il lato che mi ha convinto di più di EF4 rispetto a quel poco che ho 
visto di nHibernate è che sono riuscito abbastanza molto rapidamente a 
fare quello che volevo.
Quando mi sono messo a vedere NHibernate, ho finito per perderci solo 
un sacco di tempo.
Il tempo (di tutti) è denaro e avere un prodotto che risolve 
velocemente fa molta differenza.
i miei 2 cents


 fa molta differenza.
Yup.
-- 
ale
http://ale.riolo.co.uk
 

 Yup.
Ne ho provati diversi ... era il 2005 quando nel workshop data 
management nella slide finale suggerivo di passare agli ORM.
Poi mi sono scritto un mio mapper che ho usato a lungo perché i 
constraint dei vari orm non mi andavano giù.
Chiamala mania ma proprio non mi andava giù neppure NHibernate, non 
tanto per i concetti degli orm che mi sono molto chiari, ma per i vari 
constraint e i fiumi di mapping xml che finalmente con la CTP4 posso 
risparmiarmi (so che anche NHibernate ha fatto molta strada, il mio non 
è un confronto "attuale").
Con tutto ciò ben venga un NHibernate forte, non potrà che rendere più 
"piccante" la sfida.


 forza
diciamo, per essere espliciti, che il linq provider di NH 2 č 
semplicemente inutilizzabile in una qualunque applicazione reale, e che 
anche quello per la v3 č decisamente indietro se confrontato a quello 
per EF4 (che, apropria volta, č "indietro" rispetto a quello per L2SQL).
Se vuoi/hai bisogno di usare LINQ, oggi purtroppo NH non č una opzione
-- 
  .A
GUISA - 
http://www.guisa.org
UGIdotNET - 
http://www.ugidotnet.org
Read my blog at: 
http://blogs.ugidotnet.org/pape

 Se vuoi/hai bisogno di usare LINQ, oggi purtroppo NH non è una opzione
Forse mi sarò lasciato prendere la mano troppo con linq ma 
personalmente lo trovo insostituibile.
Certo, un occhio al profiler di sql lo tengo sempre, ma la facilità di 
estrarre dati non ha confronti con l'era pre-linq.



Guarda, io da quando ho iniziato a far viaggiare IQueryable<T> tra i 
layer (l'ho "battezzato" "idioma LET", che sta per Layered Expression 
Trees) ho praticamente iniziato a fare applicazioni "Designed for LINQ"...


 praticamente iniziato a fare applicazioni "Designed for LINQ"...
+1
Io mi sono anche costruito una piccola libreriea che mi compila al volo 
delle lambda lette da stringhe di testo che poi compongo con and/or 
usando il PredicateBuilder.
Non mi sogno neanche di rinunciare a linq...


 "piccante" la sfida.
Che comunque non è certo limitata soltanto a NHibernate vs EF ;)
-- 
ale
http://ale.riolo.co.uk
 

 Che comunque non è certo limitata soltanto a NHibernate vs EF ;)
No, certo, ma non credo ci siano dubbi che siano i due protagonisti di 
maggiore rilievo.


 maggiore rilievo.
Ecco, questo non lo scrivere dove ti può leggere Frans Bouma :))
A parte ogni altra considerazione, io ho usato in maniera molto avanzata 
LLBLGen Pro per la buona parte di un paio d'anni, e non posso far altro che 
raccomandarlo, e soprattutto ad un novizio di ORM, ben prima di NHibernate o 
EF. Tra l'altro l'ho usato ben prima che offrisse un provider Linq, che mi 
dicono, e leggo spesso, essere tra i migliori in circolazione. A Luca, prima 
di buttarsi in notti senza sonno su NHibernate, o ad accodarsi ai tanti che 
si affidano a Microsoft, suggerirei proprio di iniziare da LLBLGen Pro, una 
licenza di valutazione di 30 giorni non la negano a nessuno :)
Apro una parentesi sul nome (ecco, spero che il buon Frans Bouma non ci 
legga veramente), LLBLGen dovrebbe stare per "Lower Level Business logic 
Layer GENerator", questo se uno non conosce l'Olandese o non ha amici 
Olandesi che gli possano gentilmente spiegare che in Olandese andrebbe letto 
Lellebel, che significa più o meno Puttana, Troia, Sgualdrina, insomma ci 
siamo capiti :))
-- 
ale
http://ale.riolo.co.uk
 

 Ecco, questo non lo scrivere dove ti può leggere Frans Bouma :))
Frans di persona è meno violento che digitalmente :)



Innanzitutto ciao a tutti :)
Nel merito quoto in pieno Andrea, Linq = EF. Uso spesso Linq, ma a 
quanto mi sembra di capire non a livelli cosě alti. NH lo uso con 
piacere e soddisfazioni da tempo, la prima webapp in prod l'ho deployata 
nel 2007 ;)
Onestamente la sintassi ICriteria non mi dispiace affatto e in quei casi 
non sento la mancanza di Linq.
Un solo ironico appunto raf, Xml in NH penso non ne scriva piů nessuno 
da tempo se non per cose "particolari" :)
My 2 cents.
GG

 tempo se non per cose "particolari" :)
Firulì firulà ;)
130049 E 21/10/2010 17:23:21 Fixed broken mapping
130047 C 21/10/2010 16:10:39 Joined ...
130040 D 21/10/2010 13:25:12 Added ... bla bla task ...
130029 B 21/10/2010 09:44:50 Fixed table name
130025 A 20/10/2010 18:14:35 Refactored: ...
130005 A 20/10/2010 12:22:06 Blabla implemented.
129980 C 19/10/2010 17:20:35 Implemented blabla
129975 B 19/10/2010 16:32:36 Added blabla
129880 A 18/10/2010 16:43:44 Removed blabla
-- 
ale
http://ale.riolo.co.uk
 

 mapping.  Il dataset nel 
framework.net
 ha fatto più danni che altro.
Come non quotare?
Io, come l'ho visto, mi son detto: con quella roba li non voglio avere
nulla a che fare.
Il problema e' che 'quella roba li' si presta molto bene a wizards e
similia, per cui ci tocca.
-- 
Ciao!
Luca

 di valutazione di 30 giorni non la negano a nessuno :)
Notti senza sonno? moi?
Scherzi a parte, io mi sto dedicando alle cose di cui sopra per
curiosita' piu' che per altro. Per tre sostanziali motivi: primo, il
mio campo applicativo, che e' molto piu' ristretto, per il momento,
rispetto a quello di molti di voi, per lo meno lato DBMS; secondo,
perche' a me 'troppo framework' non piace (questa la spiego meglio); in
terza istanza perche' vi sono alcuni databases / DBMS che sto usando
(penso tanto a PostgreSQL che a Firebird) che di molte cose non hanno
supporto o hanno supporto molto limitato.
Mi scappa una precisazione di 'troppo framework'. Almeno per il momento
io tendenzialmente escludo cose di terze parti. Non che non siano
buone, capiamoci, pero' cerco prima di sporcarmi le mani con la roba
che fa gia' parte del .NET framework.
-- 
Ciao!
Luca

 io tendenzialmente escludo cose di terze parti.
Tipo usi MSUnit e TFBuild invece di NUnit e CCNet, e non usi Rhino Mocks vel 
similia? Non hai ancora comprato una licenza di ReSharper, nel 2010? :p
Oppure accetti supinamente quando ti propinano cose sostanzialmente 
indefinibili senza scadere nel volgare, i.e. EF v1, quando in giro ci sono 
alternative migliori, i.e. NHibernate, o anche migliori e commercialmente 
supportate, i.e.. LLBLGen Pro?
Per carit�, Microsoft tante cose le azzecca, ma tante altre proprio no.
-- 
ale
http://ale.riolo.co.uk
 

o EF.
io ad un novizio di O/RM (e non solo ai novizi <g>) consiglierei di studiar 
bene il modello relazionale dei dati e lo storico documento "FORM" di Mark 
Fussels (ma anche una letturina di DDD, eh!), altrimenti  finiranno per 
usare un O/RM come "scorciatoia per evitare di scrivere SQL" e poi giï¿œ a far 
FUD: gli O/RM sono lenti, i RDBMS non scalano e serve NoSQL, ...


non sento la mancanza di Linq.
Gianluca, il "problema" � che ICriteria � "solo" un query object, LINQ � 
*anche* un query object. Se usi LINQ "solo" per fare le query, stai 
mangiando la Sacher senza la marmellata: non � una Sacher :-)
Se fai un salto ai Community Days, nella sessione "MVC++" far� vedere 
qualcosa che IMHO potrebbe interessarti :-)


alternative migliori,
io concordo con te, se tu concordi con me sul fatto che ci� che � "migliore" 
lo definiscono i requisiti, e non le caratteristiche tecniche del toolkit: 
ci sono casi nei quali EF1 � "migliore" (leggi: preferibile) a NH (ed io il 
primo deploy in produzione di NH l'ho fatto nel 2004, eh! Io NH lo apprezzo 
tantomatanto, eh!)


 commercialmente supportate, i.e.. LLBLGen Pro?
Si e no. Credo che 'buono' e 'non buono' dipenda dal campo applicativo.
Tieni presente che per me, salvo rari casi, database = un posto dove
mettere via dati che qualcun altro impieghera'; questo significa che
spesso mi basta ina 'INSERT' SQL diretta via ADO.Net. Il resto e'
curiosita'
-- 
Ciao!
Luca

 di scrivere SQL" 
Cosa che IMHO in ogni caso non si puo' evitare.
-- 
Ciao!
Luca


Certo Andrea, non volevo assolutamente dire che ICriteria si pu� 
tranquillamente usare *al posto* di LINQ, solo che in mancanza di LINQ 
non mi sembra cos� "pessimo" :)
Io non sai quanti salti farei, nell'ordine sono riuscito a perdermi:
Wp7 Event
NHDay
Varie ed eventuali
Cercher� di tenermi aggiornato per capire se riesco a partecipare, sarei 
finalmente curioso di vedere:
1) Un Wp7 che sicuramente qualcuno avr� a portata di mano :)
2) Come voi ragazzacci di altri pianeti avete plasmato e utilizzato 
Linq, expression trees et simili e l'avete utilizzato per i vostri 
scopi. Sono un p� fermo con gli "studi personali" su VS2010 a causa di 
Progetto di lavoro + Bimbo piccolo, che messi insieme sono deleterei per 
i miei neuroni affamati :)
GG

 :)
Mi sembra di capire che Andrea nei prossimi Community Days soddisferï¿œ 
queste voglie :) Oh mamma, detto cosï¿œ ... ROTFL


 similia, per cui ci tocca.
Una precisazione. Per certi usi (leggi RAD) ï¿œ ancora un buon strumento. 
Ma dal momento in cui quell'app avrï¿œ una versione 2, la scelta del 
dataset la pagherai carissima.


 queste voglie :) Oh mamma, detto cosï¿œ ... ROTFL
Bene, l'iscrizione l'ho fatta, spero di non doverci rinunciarci, mi 
spaventa un po' l'orario in concomitanza con l'orario degli asili nido, 
al massimo arriverï¿œ un po' piï¿œ tardi ! :)
GG

queste voglie :) Oh mamma, detto cosï¿œ ... ROTFL
<zeneize>Lo chiamavano bocca di rosa, vendeva le expression, vendeva le 
expression :-)</zeneize>


 arriverï¿œ un po' piï¿œ tardi ! :)
come non capirti :)


 expression :-)</zeneize>
ROTFL!!!
