2010-01-10 8 views
0

Je construis une application de bureau avec Castle ActiveRecord et je veux être capable de faire l'équivalent de 1 session nHibernate par formulaire de fenêtre. Des idées sur comment puis-je faire cela avec Active Record?Comment créer différentes sessions pour différentes fenêtres dans une application de bureau avec ActiveRecord?

Plus précisément, j'ai une fenêtre principale qui vous permet de parcourir les données (en lecture seule), puis vous pouvez ouvrir des formulaires distincts pour éditer les données.

Chaque fois qu'un formulaire est ouvert, je veux créer une nouvelle session, obtenir une copie des données à éditer (ainsi il peut être changé sans encore affecter les données dans la fenêtre principale). Je veux ensuite être en mesure de manipuler cette copie via la liaison de données. Et enfin, soit valider les modifications (si l'utilisateur choisit de sauvegarder) ou les annuler (si l'utilisateur choisit d'annuler).

Des idées?

Répondre

1

Si vous n'avez pas besoin de chargement paresseux, n'utilisez pas SessionScope. Vous pouvez simplement numéroter et appeler entity.Save() sur Save. Puisque vos objets sont détachés sans SessionScope, vous n'avez rien à faire lors de l'annulation du formulaire.

Si vous avez besoin d'un chargement paresseux, cela ne fonctionnera pas encore avec ActiveRecord. Un ConversationalScope qui permet d'utiliser CpBT (dans votre cas Conversation par instance de formulaire) est planifié, mais pas encore disponible.

Une possibilité est d'essayer Rhino Commons qui a une implémentation d'unité de travail pour ActiveRecord. Cela pourrait permettre ce que vous voulez avec AR actuel, mais je ne l'ai pas utilisé pendant environ 2 ans.

Édition: Une implémentation CpBT de base est désormais disponible depuis le réseau. Check-out et construire avec nant. Voir ce lien pour savoir comment l'utiliser: https://svn.castleproject.org/svn/castle/ActiveRecord/trunk/src/Castle.ActiveRecord.Tests/Conversation/ConversationScenarioTest.cs Ce n'est pas encore prêt pour la production, mais j'adorerais avoir des commentaires à ce sujet.

+0

Merci pour la réponse. Si je n'utilise pas SessionScope, va-t-il réellement créer une instance séparée de l'élément de données à éditer? La raison pour laquelle je pose la question est parce qu'un autre problème que je rencontre est si tous les deux utilisent la même instance (même si je ne sauvegarde pas) les messages INotifyPropertyChanged vont à la fenêtre principale - que je ne veux pas. Donc, travailler avec une copie discrète sonne mieux si c'est possible? –

+0

MERCI !! Je suis sur le point de me rendre à la conférence CodeMash pour la semaine, mais j'essaierai certainement ceci quand je serai de retour. Question rapide - cela va-t-il permettre un chargement paresseux (par exemple, via une liaison de données - donc des appels qui ont eu lieu en dehors du nouveau ConversationalScope (conversation))? –

+0

Oui, j'ai même souligné cela dans un commentaire dans ce test. Je l'ai amélioré aujourd'hui, je pense que ce sera complet d'ici la fin de la semaine. – MZywitza

Questions connexes