Comment évalueriez-vous chacun d'eux en termes de:
- Performance
- Vitesse de développement
- Code soigné, intuitif et maintenable
- Souplesse
- Global
J'aime mon SQL et j'ai donc toujours été un fan inconditionnel d'ADO.NET et des procédures stockées, mais j'ai récemment joué avec Linq to SQL et j'ai été époustouflé par la rapidité avec laquelle j'écrivais ma couche DataAccess et j'ai décidé de dépenser quelque temps vraiment comprendre soit Linq à SQL ou EF ... ou ni l'un ni l'autre?
Je veux juste vérifier qu'il n'y a pas une grande faille dans aucune de ces technologies qui rendrait mes recherches inutiles. Par exemple, les performances sont terribles, c'est cool pour des applications simples, mais cela ne peut vous mener que si loin.
Mise à jour: pouvez-vous vous concentrer sur les EF VS L2S VS SP plutôt que sur les ORM VS SP. Je suis principalement intéressé par EF VS L2S. Mais je tiens également à les comparer aux proc stockés, car le langage SQl simple est quelque chose que je connais beaucoup.
la source
Réponses:
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.
la source
Procédures stockées:
(+)
(-)
ORM:
(+)
(-)
Le compromis général est entre avoir une grande flexibilité et perdre beaucoup de temps par rapport à être limité dans ce que vous pouvez faire mais le faire très rapidement.
Il n'y a pas de réponse générale à cette question. C'est une question de guerres saintes. Cela dépend aussi d'un projet à portée de main et de vos besoins. Choisissez ce qui vous convient le mieux.
la source
As any abstraction can produce "high-level" developers having no idea how it works under the hood
votre question est essentiellement O / RM vs écriture manuscrite SQL
Vous utilisez un ORM ou du SQL simple?
Jetez un œil à certaines des autres solutions O / RM disponibles, L2S n'est pas le seul (NHibernate, ActiveRecord)
http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software
pour répondre aux questions spécifiques:
la source
LINQ-to-SQL est une technologie remarquable qui est très simple à utiliser et qui, dans l'ensemble, génère de très bonnes requêtes vers le serveur principal. LINQ-to-EF devait le remplacer, mais historiquement, il a été extrêmement maladroit à utiliser et a généré un SQL bien inférieur. Je ne connais pas la situation actuelle, mais Microsoft a promis de migrer toutes les qualités de L2S dans L2EF, alors peut-être que c'est mieux maintenant.
Personnellement, j'ai une aversion passionnée pour les outils ORM (voir ma diatribe ici pour les détails), et donc je ne vois aucune raison de favoriser L2EF, car L2S me donne tout ce dont je m'attends à avoir besoin d'une couche d'accès aux données. En fait, je pense même que les fonctionnalités L2S telles que les mappages fabriqués à la main et la modélisation de l'héritage ajoutent une complexité complètement inutile. Mais c'est juste moi. ;-)
la source
Il existe une toute nouvelle approche que vous voudrez peut-être envisager si vous recherchez la puissance et les performances des procédures stockées et le développement rapide que fournissent des outils comme Entity Framework.
J'ai pris SQL + pour un essai routier sur un petit projet, et c'est vraiment quelque chose de spécial. Vous ajoutez essentiellement ce qui équivaut à des commentaires à vos routines SQL, et ces commentaires fournissent des instructions à un générateur de code, qui crée ensuite une bibliothèque de classes orientée objet très agréable basée sur la routine SQL réelle. Un peu comme un cadre d'entité similaire à l'envers.
Les paramètres d'entrée font partie d'un objet d'entrée, les paramètres de sortie et les jeux de résultats font partie d'un objet de sortie et un composant de service fournit les appels de méthode.
Si vous souhaitez utiliser des procédures stockées, mais que vous souhaitez toujours un développement rapide, vous voudrez peut-être jeter un œil à ce truc.
la source