Prima di tutto, se stai avviando un nuovo progetto, scegli Entity Framework ("EF"): ora genera SQL molto migliore (più simile a Linq a SQL) ed è più facile da mantenere e più potente di Linq a SQL (" L2S "). A partire dal rilascio di .NET 4.0, considero Linq to SQL una tecnologia obsoleta. La SM è stata molto aperta a non continuare ulteriormente lo sviluppo di L2S.
1) Prestazioni
È difficile rispondere a questa domanda. Per la maggior parte delle operazioni a entità singola ( CRUD ) troverete prestazioni quasi equivalenti con tutte e tre le tecnologie. Devi sapere come funzionano EF e Linq to SQL per usarli al meglio. Per operazioni ad alto volume come le query di polling, è possibile che EF / L2S "compili" la query dell'entità in modo che il framework non debba rigenerare costantemente l'SQL o che si possano verificare problemi di scalabilità. (vedi modifiche)
Per gli aggiornamenti collettivi in cui si stanno aggiornando enormi quantità di dati, SQL grezzo o una procedura memorizzata funzioneranno sempre meglio di una soluzione ORM perché non è necessario eseguire il marshalling dei dati via cavo sull'ORM per eseguire gli aggiornamenti.
2) Velocità di sviluppo
Nella maggior parte degli scenari, EF soffia via i proc SQL / stored nudi quando si tratta di velocità di sviluppo. Il designer EF può aggiornare il modello dal database man mano che cambia (su richiesta), quindi non si verificano problemi di sincronizzazione tra il codice oggetto e il codice del database. L'unica volta che non prenderei in considerazione l'utilizzo di un ORM è quando si sta eseguendo un'applicazione di tipo report / dashboard in cui non si esegue alcun aggiornamento o quando si crea un'applicazione solo per eseguire operazioni di manutenzione dei dati non elaborati su un database.
3) Codice pulito / mantenibile
Giù le mani, EF batte SQL / sprocs. Poiché le relazioni sono modellate, i join nel codice sono relativamente rari. Le relazioni delle entità sono quasi evidenti al lettore per la maggior parte delle domande. Niente è peggio che dover passare da un debug di livello a livello o attraverso più SQL / livello intermedio per capire cosa sta realmente accadendo ai tuoi dati. EF porta il tuo modello di dati nel tuo codice in un modo molto potente.
4) Flessibilità
I processi memorizzati e SQL raw sono più "flessibili". Puoi sfruttare sprocs e SQL per generare query più rapide per il caso specifico dispari e puoi sfruttare la funzionalità DB nativa più facilmente di quanto tu possa fare con ORM.
5) Complessivamente
Non lasciarti sorprendere dalla falsa dicotomia della scelta di un ORM rispetto alle procedure memorizzate. Puoi usare entrambi nella stessa applicazione e probabilmente dovresti. Le grandi operazioni in blocco dovrebbero essere eseguite in stored procedure o SQL (che può essere effettivamente chiamato dall'EF) e l'EF dovrebbe essere utilizzato per le operazioni CRUD e la maggior parte delle esigenze del livello intermedio. Forse sceglieresti di usare SQL per scrivere i tuoi rapporti. Immagino che la morale della storia sia la stessa di sempre. Usa lo strumento giusto per il lavoro. Ma il fatto è che EF è molto buono al giorno d'oggi (a partire da .NET 4.0). Trascorri un po 'di tempo in tempo reale leggendolo e capendolo in profondità e puoi creare con facilità fantastiche app ad alte prestazioni.
EDIT : EF 5 semplifica un po 'questa parte con le query LINQ compilate automaticamente , ma per cose veramente voluminose, dovrai sicuramente testare e analizzare ciò che si adatta meglio a te nel mondo reale.