J’ai un petit problème, certainement de compréhension, avec Linq to SQL.
Je suis en train de faire une application qui a une liste de produits, que l’utilisateur va pouvoir modifier. Au démarrage de l’application, il a une liste de ces produits dans laquelle il peut faire une recherche et qu’il peut ouvrir en double-cliquant.
Les changements ne sont pas directement sauvés dans la base de données, il doit cliquer sur un bouton sauvegarder pour qu’ils le soient et il a la possibilité de fermer l’application ou la form qui permet de modifier le produit sans sauvegarder à la base de données.
C’est le premier projet où j’utilise L2SQL et en voyant le datacontext et la méthode SubmitChanges() que ce serait un moyen simple de faire ce genre de choses.
J’ai donc créé une application avec différentes couches (chacune de ces couches en un projet distinct):
[ul]
[li]Tout en bas mon “data layer” qui contient le fichier dbml créé à partir de mon schéma de base de données.[/li][li]Au milieu, un “business layer” qui contient l’objet datacontext et qui va offire des méthodes au GUI (par exemple lister les produits)[/li][li]Tout en haut, mon GUI avec un contrôleur de GUI qui contient l’objet datacontext et qui va jouer le chef d’orchestre pour les différentes fenêtres et contrôles[/li][/ul]
Pour la communication entre ce petit monde, j’ai utilisé les objets créés pour chaque tables. Par exemple, pour ma table produits une classe Produit a été générée par le dbml et ma méthode listeProduits de mon business layer renvoie une collection de ces produits. Ca me semblait être la solution la plus simple.
Ensuite, par exemple, des datagrids dans mon UI peuvent se databinder à ces objets.
Tout ça fonctionne plutôt bien, le seul problème que j’ai c’est que quand je charge un produit dans la Form qui permet de modifier un produit, j’ai databindé les propriétés de l’objet Produit à mes contrôles dans la Form. Du coup tous les changements sont renvoyés au datacontext, ce qui ne me pose pas de problème vu qu’ils ne sont pas envoyés à la base de données tant que j’ai pas appelé SubmitChanges().
Le seul soucis c’est que je ne trouve aucun moyen d’annuler les changements qui ont été faits. Lorsque l’utilisateur ferme sans sauvegarder je me suis dit qu’il pourrait simplement annuler les changement, mais on dirait que l’option n’existe pas.
Est-ce que je fais complètement fausse route ou j’ai juste raté un moyen? Qqn a une meilleure idée?
Merci d’avance!