Transition EF vers ADO.NET

ado.net asp.net-mvc-3 dapper entity-framework

Question

Besoin de suggestion pour la migration peu de modules de l'application asp.net mvc 3: à l'heure actuelle, nous utilisons EF avec les classes POCO, mais à l'avenir, pour certains modules axés sur les performances, nous devons passer à ADO.NET ou à un autre outil ORM .NET).

Le problème auquel nous sommes confrontés à l'heure actuelle est le suivant: nos vues dépendent des classes Collection chargées via EF, quelle stratégie dois-je utiliser pour que ces classes d'entités soient chargées exactement comme par EF avec d'autres outils ADO.NET ou ORM? .

Ce que je veux, c'est être capable de basculer entre EF & ADO.NET avec un minimum de changement au niveau de la couche d'accès aux données, car je ne veux pas que mes vues soient prises en compte.

Réponse acceptée

Vous devez utiliser le modèle de conception de référentiel pour masquer l'implémentation de votre couche d'accès aux données. Le référentiel renverra les mêmes POCO et aura les mêmes contrats d'exploitation, quelle que soit la couche d'accès aux données que vous utilisez sous le capot. Maintenant, cela fonctionne bien si vous utilisez des vrais POCO qui n'ont pas de méthodes virtuelles pour le chargement différé. Vous devrez explicitement gérer le chargement des collections dépendantes sur les entités pour que cela fonctionne.


Réponse populaire

Ce que j'ai vu jusqu'ici, une transition transparente d'un ORM / DAL à un autre est une illusion. Le schéma de dépôt suggéré par Kevin est une aide précieuse, un préalable même (+1). Mais néanmoins, chaque ORM a une empreinte dans la couche de domaine. Avec EF, vous utilisez probablement des propriétés virtuelles, peut-être des annotations de données ou, facilement oubliées, un cadre de validation qui s'intègre facilement (et en exclut d'autres). Vous pouvez compter sur la capacité d'EF à mapper les tables de jointure. Il y a peut-être des choses que vous ne voulez pas (mais que vous aimeriez faire) à cause de EF.

(Sans parler des outils qui exécutent un échafaudage au-dessus d'un contexte EF. Cela rendrait le verrouillage encore plus serré.)

Certaines choses que je pourrais faire dans votre situation (pardonnez-moi si je vous le dis)

  • Utilisez EF de manière optimale. (Meilleurs mappages, meilleures associations, ...) La préparation du futur est bonne, mais elle dégénère facilement dans le modèle de YAGNI .
  • Devenez compétent en linq + EF: il existe de nombreuses façons de tuer inutilement les performances avec EF. Supposons que EF soit suffisant!
  • Continuez à rechercher des solutions de rechange pour des performances élevées, telles que l'utilisation de procédures stockées, la parallélisation, le traitement en arrière-plan et / ou la réduction des volumes de données, et choisissez-en une lorsque les exigences (fonctionnelle et non fonctionnelle) sont suffisamment claires.
  • Peut-être introduire une couche d'abstraction avec les DTO qui servent votre point de vue maintenant, et qui à l'avenir peut être facilement matérialisée par un autre ORM ou ADO.
  • Exposez les POCO comme des interfaces, qui peuvent être implémentées ultérieurement par d'autres objets.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi