Bonjour,
Je suis développeur d’applications desktop et je suis entrain de me familiariser avec les applications Web. Malgré la facilité d’adaptation vers les Framework WebForm ASP plus proche de la culture des applications desktop, j’ai décidé de me lancer sur ASP.NET MVC (pour la maintenabilité et les tests unitaires).
Après avoir longuement parcouru les tutos et forum sur ASP.NET MVC regorgeant d’exemples d’applications simples mono-table de type CRUD, je n’ai trouvé aucun exemple de code simple restant à ma porté de débutant sur ASP MVC, sur les problématiques rencontré sur un projet multi-tables avec des mises à jour effectuées sur plusieurs requêtes successive mais englobées dans une transaction unique pour maintenir l’intégrité de la BDD, bien entendu dans un contexte Web StateLess (problème que je n’ai pas sur des appli. Desktop connectées).
Pour facilité vos réponses, je vais prendre l’exemple d’une application de type facture avec une entité ENTETE et une entité LIGNES. Lors de la mise à jour d’une facture via l’application Web, l’utilisateur va effectuer plusieurs requêtes successives d’ajout de lignes, de modifications de lignes, ainsi que de suppressions de lignes. L’ensemble de ces requêtes ne doivent être persistées en base, que lors de la requête finale de validation de la facture par l’utilisateur. Requête finale qui entraînera également la mise à jour des infos de l’entité ENTETE (total HT, TVA, TTC par exemple).
Tous les exemples simples que j’ai parcourus dans les différents tutos, instancient le contexte EF au sein du contrôleur. Cela implique que la persistance en base doit avoir lieu dans l’action appelée par la requette. Si ce n’est pas le cas, les modifications apportées au contexte vont êtres perdu à chaque nouvelle requette.
La solution consisterai a instancié le contexte EF dans la session (dans l’événement session_start de l’instance de la class MVCApplication dans gobal.asax).
Je n’ai trouvé aucun exemple mettant en œuvre cette solution et je me demande si cela est envisageable dans un environnement Web ou il peut y avoir de nombreuses sessions simultanées avec pour chacune d’elles un objet contexte susceptible d’avoir une empreinte mémoire conséquente sur le serveur. Dans un contexte Desktop, je n’ai pas ce problème dans la mesure où l’empreinte mémoire est reparti sur chaqu’un des postes clients et n’impacte pas le serveur.
Est-ce que quelqu’un pourrait m’indiquer un lien vers un exemple mettant en œuvre cette solution ou une solution alternative respectant les « Best Practices » en ce domaine.
Merci à vous. Et bon développement.
Partager