web-dev-qa-db-fra.com

Faut-il utiliser Entity Framework?

Nous avons actuellement la pile suivante:

  • VS 2005
  • Formulaires Web
  • SQL Server 2005
  • IIS 6

Nous prévoyons de passer à ceci:

  • VS 2010
  • MVC et formulaires Web
  • SQL Server 2008
  • IIS 7

Ma question est, lorsque nous passons à MVC avec VS 2010, devons-nous utiliser Entity Framework (ou un autre ORM), un micro ORM (comme Massive ), ou simplement du SQL?

Tous les didacticiels que j'ai lus sur VS 2010 sont tous destinés à utiliser Entity Framework pour les transactions de données, mais cela va-t-il durer dans un avenir prévisible (5 ans et plus)?

Si cela est important, les applications de nos clients peuvent compter de 10 à 1 000 utilisateurs actifs.

31
guanome

Je suis récemment passé de l'utilisation de requêtes SQL en ligne à l'utilisation d'EF et voici ce que j'ai trouvé:

Avantages

  • Beaucoup plus rapide pour construire le DAL (j'adore ne pas écrire les requêtes SQL!)
  • Beaucoup plus facile à entretenir
  • Plus besoin de me rappeler d'analyser mes entrées avant de construire une instruction sql en ligne, ce qui signifie moins de chances d'une attaque par injection SQL (bien sûr, cela est toujours possible en fonction de vos requêtes, mais beaucoup moins probable)

Les inconvénients

  • Impossible de couvrir plusieurs bases de données ... du moins pas facilement
  • Toutes les entités (tables, vues, etc.) ont besoin d'une clé primaire
  • Si vous souhaitez mettre à jour une seule colonne dans une table de plus de 100 colonnes obligatoires (pas ma conception de table), vous devez dérouler les 100 colonnes pour effectuer la mise à jour. Ou utilisez une procédure stockée.
  • J'ai rencontré des problèmes avec certaines valeurs par défaut définies sur le serveur SQL qui ne sont pas récupérées dans le modèle d'entité après l'ajout d'un nouvel enregistrement. Habituellement, c'est avec des valeurs calculées ou des valeurs qui sont ajoutées dans un déclencheur INSERT
  • À l'occasion, les requêtes SQL sont mal écrites et sont lentes à exécuter. Si vous avez une requête à exécution lente, exécutez une trace SQL pour voir ce que fait EF. Il est possible que vous puissiez retravailler cette requête en tant que SP ou vue. Cela ne se produit pas si souvent cependant.
  • J'ai eu quelques problèmes avec la tentative de création d'une association entre des tables qui n'ont pas de clé étrangère définie dans SQL Server. C'est généralement parce que j'essaie de créer un 1:0-1 relation dans laquelle EF souhaite utiliser un 1:0-*

Je ne suis pas un expert EF cependant, j'ai donc probablement raté certaines choses. Ce ne sont que les éléments que je sais que j'ai rencontrés dans le passé lors du passage de SQL en ligne à Entity Framework. Je suis content d'avoir fait le changement, mais il y a eu des moments où j'ai vraiment détesté EF en raison de ses caprices.

45
Rachel

Entity Framework est un outil de productivité. Sauf si vous avez une bonne raison de ne pas le faire (par exemple, vous êtes sur SQL 2000 ou n'avez pas le temps de vous lancer dans la technologie), utilisez les meilleurs outils à votre disposition.

Cela étant dit, je trouve que le concept d'entités se traduit très bien dans le modèle du modèle MVC. Tout en ayant une relation 1: 1 avec les modèles et les tables est une mauvaise pratique, penser en termes d'entités a tendance à produire des conceptions propres, un code facile à lire (en particulier avec LINQ).

Entity Framework est activement pris en charge par Microsoft. Personne n'a une boule de cristal magique pour dire "le soutien durera X ans". Je ne vois aucune raison de croire que l'entité mourra au cours des 5 prochaines années.

12
P.Brian.Mackey

Une autre solution potentielle consiste à utiliser une autre bibliothèque Entity Framework qui n'est pas celle fournie avec V.S. Il y en a quelques-uns sur le Web.

Le concept de framework Entity/3 couches existe depuis un certain temps et a fonctionné avec plusieurs bibliothèques personnalisées, comme de nombreux autres développeurs, avant que Microsoft ne publie son propre framework "officiel".

Avantages

Bénéficiez des avantages du framework Entity (D.A.L.), sans être bloqué par les changements constants des bibliothèques/frameworks de Microsoft.

Ajouter des fonctionnalités à une bibliothèque qui ne sont peut-être pas disponibles pour la bibliothèque officielle existante, comme l'utilisation de plusieurs marques de base de données.

Contre

Doit prendre en charge la bibliothèque ou les outils. Il est très courant d'avoir un outil de génération de code d'entité pour générer les entités.

4
umlcat

Vous devez prendre une décision architecturale en fonction du problème et de la solution existante. Comme pour toute technologie, il y a des avantages et des inconvénients.

Personnellement, j'utiliserais normalement le framework d'entité pour de nouveaux développements mais ne réécrirais pas le code existant. Vous obtenez alors la vitesse de développement futur, mais vous n'avez pas à investir beaucoup de temps pour convertir le code. L'inconvénient de cette approche est qu'elle réduit la cohérence.

3
Tom Squires

Dans votre situation, j'utiliserais certainement Entity Framework, j'ai trouvé que cela fonctionne bien avec MVC.
Voici quelques vraies raisons et indications.

  • Linq est un plaisir à utiliser, et l'exécution retardée est également extrêmement utile.
  • Vous pouvez générer vos modèles (cependant lors de l'utilisation avec mvc, je vous recommande d'utiliser des modèles de vue conjointement avec les modèles de données, cela rend la validation et la liaison de modèle beaucoup plus faciles, si vous adoptez cette approche, utilisez automapper pour mapper les modifications sur votre modèle de données).

Il y a cependant un certain nombre de choses que vous devrez apprendre à utiliser un ORM.

  • Ce que le contexte fait pour vous (suivi des entités)
  • Qu'un contexte doit être utilisé comme unité de travail
  • N'oubliez pas de penser à la concurrence, EF peut vous dire quand votre objet est obsolète, mais cela peut être difficile si vous souhaitez gérer correctement la concurrence entre les demandes (car vous devez garder un horodatage ou quelque chose).

Choses à considérer

  • Les déclencheurs et les ORM ne fonctionnent pas ensemble, utilisez plutôt les événements ORM.
  • Assurez-vous que toutes vos tables ont des clés promary.

Je recommanderais également fortement l'approche du code en premier, même si vous avez une base de données existante.

  • Les conventions signifient que vous n'avez pas besoin de régénérer les mappages ou les classes lorsque vous modifiez la base de données.
  • Il est plus important de placer la validation et d'autres logiques dans les modèles.
  • Vous pouvez utiliser le générateur de code pour les créer si vous avez une énorme base de données existante.
2
Daniel Little