2010-03-25 4 views
4

Nous avons actuellement une application qui dépend largement des procédures stockées. Il y a une forte utilisation des tables temporaires. C'est une application extrêmement volumineuse.Application qui dépend fortement des procédures stockées

Face à cette situation, je voudrais utiliser Entity Framework ou Linq2Sql pour une réécriture. Je pourrais envisager d'utiliser Fluent Hibernate ou Subsonic, car je les ai beaucoup utilisé dans le passé. J'ai eu des problèmes avec Linq2Sql générant les types de retour pour les procédures stockées en raison de l'utilisation des tables temporaires, et je pense qu'il est difficile d'aller et de modifier toutes les procédures stockées des tables temporaires aux tables en mémoire. Considérant les 2 choix que je veux faire, lequel des 2 est le meilleur chemin à parcourir et pourquoi? Si mes choix sont extrêmement idiots, veuillez fournir des alternatives.

Modifier: La raison de la question et le changement est que la couche d'accès aux données est inexistante et a été construite il y a 10 ans. Nous rencontrons toujours beaucoup de problèmes avec cela. Je ne veux pas divulguer trop, mais si vous le voyiez, vos yeux commenceraient à saigner :)

+2

Permettez-moi d'être le premier à demander l'obligatoire « pourquoi? ». Il n'y a rien de mal avec les procs stockés et les tables temporaires lorsqu'il est utilisé correctement. La modification de votre architecture d'accès aux données introduira un nouvel ensemble de bogues et pourrait entraîner des performances dégradées. –

Répondre

4

Ce n'est probablement pas la réponse que vous recherchez, mais il semble que ce soit principalement pour isoler le code pertinent dans une «nouvelle» couche d'accès aux données.

Si vous supprimez l'accès aux données via des interfaces, vous pourrez utiliser n'importe quelle implémentation d'accès aux données que vous aimez. Je ne suis pas sûr à 100% de la façon dont cela se rapporte à des choses comme le cadre Enity en particulier.

La raison pour laquelle je prendrais cette voie est qu'elle permet une séparation claire et efficace des problèmes qui rendent l'application plus facile à travailler avec le temps, et qui ne le fait pas au détriment des performances (selon mon expérience). Dans un premier temps - plutôt que de réécrire je chercherais à le faire - il suffit d'avoir un calque de données sur place, et de l'extraire pour pouvoir travailler avec.

En parallèle, vous pouvez faire des preuves de concept avec des choses comme l'Enity Framework afin que lorsque vous êtes prêt à refactoriser la nouvelle couche DAL, vous ayez des informations solides sur lesquelles fonder votre décision.

Rappelez-vous simplement que « qualités d'exécution » doivent être équilibrés avec les « évolutionnaires » :)

+0

+1 Je suis d'accord. Définir le niveau d'abstraction est la clé. Avec cela, il pourrait créer des implémentations de proc stockées très facilement et convertir lentement ces implémentations au fil du temps à tout ce qu'il veut. –

+0

C'est vraiment la réponse que je cherchais, merci Adrian. La raison pour laquelle je préfère cette réponse est que je crois que l'abstraction est la clé et que, au fur et à mesure que le logiciel évolue, notre logiciel devrait aussi pouvoir le faire. Merci! –

0

Avez-vous pensé à LLBLGen Pro? C'est une solution commerciale, mais elle est très bon marché et je crois que c'est beaucoup mieux que ces deux alternatives. Je pense que Frans Bouma est aussi un utilisateur de SO, mais leurs forums sont également très utiles.

+0

Je n'ai pas travaillé avec LLBLGen, je le sais, car Frans Bouma est un twitterer très actif et C# MVP :) Quels sont les avantages de LLBLGen Pro par rapport aux alternatives? –

+0

Support pour n'en nommer qu'un ... Essayez d'obtenir une réponse de MS sur tous les problèmes que vous pourriez avoir avec Linq2Sql ou EF. – Matt