Tout d'abord, si vous démarrez un nouveau projet, optez pour Entity Framework ("EF") - il génère désormais beaucoup mieux SQL (plus comme Linq to SQL) et est plus facile à maintenir et plus puissant que Linq to SQL (" L2S "). Depuis la sortie de .NET 4.0, je considère Linq to SQL comme une technologie obsolète. MS a été très ouvert à l'idée de ne pas poursuivre le développement de L2S.
1) Performance
C'est difficile à répondre. Pour la plupart des opérations sur une seule entité ( CRUD ), vous trouverez à peu près des performances équivalentes avec les trois technologies. Vous devez savoir comment EF et Linq to SQL fonctionnent pour les utiliser au maximum. Pour les opérations à volume élevé telles que les requêtes d'interrogation, vous souhaiterez peut-être que EF / L2S "compile" votre requête d'entité de sorte que le framework n'ait pas à régénérer constamment le SQL, ou vous pouvez rencontrer des problèmes d'évolutivité. (voir modifications)
Pour les mises à jour groupées où vous mettez à jour d'énormes quantités de données, le SQL brut ou une procédure stockée fonctionnera toujours mieux qu'une solution ORM car vous n'avez pas besoin de marshaler les données par câble vers l'ORM pour effectuer des mises à jour.
2) Vitesse de développement
Dans la plupart des scénarios, EF soufflera les procs SQL / stockés nus en ce qui concerne la vitesse de développement. Le concepteur EF peut mettre à jour votre modèle à partir de votre base de données au fur et à mesure de ses modifications (sur demande), afin que vous ne rencontriez pas de problèmes de synchronisation entre votre code objet et le code de votre base de données. La seule fois où je n'envisagerais pas d'utiliser un ORM, c'est lorsque vous effectuez une application de type rapport / tableau de bord où vous ne faites aucune mise à jour, ou lorsque vous créez une application juste pour effectuer des opérations de maintenance de données brutes sur une base de données.
3) Code ordonné / maintenable
De loin, EF bat SQL / sprocs. Parce que vos relations sont modélisées, les jointures dans votre code sont relativement peu fréquentes. Les relations des entités sont presque évidentes pour le lecteur pour la plupart des requêtes. Rien de pire que d'avoir à passer d'un débogage de niveau à l'autre ou à travers plusieurs niveaux SQL / intermédiaire afin de comprendre ce qui se passe réellement dans vos données. EF apporte votre modèle de données dans votre code d'une manière très puissante.
4) Flexibilité
Les proc stockés et le SQL brut sont plus "flexibles". Vous pouvez tirer parti des sprocs et de SQL pour générer des requêtes plus rapides pour les cas spécifiques impairs, et vous pouvez tirer parti des fonctionnalités de base de données natives plus facilement que vous ne le pouvez avec ORM.
5) Global
Ne vous laissez pas prendre dans la fausse dichotomie de choisir un ORM vs d'utiliser des procédures stockées. Vous pouvez utiliser les deux dans la même application, et vous devriez probablement le faire. Les grandes opérations en bloc doivent aller dans des procédures stockées ou SQL (qui peuvent en fait être appelées par l'EF), et EF doit être utilisé pour vos opérations CRUD et la plupart des besoins de votre niveau intermédiaire. Vous pourriez peut-être choisir d'utiliser SQL pour rédiger vos rapports. Je suppose que la morale de l'histoire est la même qu'elle a toujours été. Utilisez le bon outil pour le travail. Mais le maigre est que EF est très bon de nos jours (à partir de .NET 4.0). Passez un peu de temps à lire et à comprendre en profondeur et vous pouvez facilement créer des applications incroyables et hautes performances.
EDIT : EF 5 simplifie un peu cette partie avec les requêtes LINQ compilées automatiquement , mais pour des choses vraiment volumineuses, vous aurez certainement besoin de tester et d'analyser ce qui vous convient le mieux dans le monde réel.