2010-12-09 59 views
3

Ok, nous avons les éléments suivants senario, mais comment voulez-vous faire Optimistic LockingNHibernate + ViewModel + MVC + verrouillage Optimiste

nous avons une classe client

  • Nom
  • Adresse
  • Version

La version est une variable de collision (int) qui, lorsque la ligne est éditée, la version va augmenter ase par 1.

Nous avons maintenant Martin qui ouvre le Client 129, comme avec un modèle de vue, l'objet du modèle est aplati dans le Modèle de Vue puis transmis à un Ecran de Modification du Client. David entre-temps ouvre également le client 129 pour l'édition, change le nom et sauve.

Martin, qui éditait encore le client (maintenant une ancienne version), va sauvegarder ses changements, à ce stade, j'espère voir une erreur de verrouillage pour être jeté

la question est de savoir comment vous gérez optimiste avec verrouillage NH (en utilisant FluentNHibernate pour les correspondances), feriez-vous

  • doivent pousser le numéro de verion dans le ViewModel? Ensuite, quand il a été soumis avec une mise à jour, charger dans l'objet modèle actuel et vérifier la version Numéros
  • Ou est une meilleure façon (je sais que NH ferait versioning si je charge, édite et mise à jour dans la même session)

une chose supplémentaire, ce scénario sera utilisé dans une ferme, ne pas partager un cache

un grand merci à l'avance

Répondre

2

Ceci est essentiellement un verrou hors ligne, ce qui NHibernate ne traite pas.

Ce que vous devez faire est quelque chose comme:

Demande de modification:

  • entité de charge
  • Pousser l'entité dans ViewModel (y compris le numéro de version)
  • etc ...

Enregistrer cette demande:

  • entité de charge (à nouveau)
  • Vérifiez numéro de version du modèle de vue contre l'entité
    • sinon le même spectacle erreur/options de rapprochement
    • entité mise à jour d'autre, etc ...
+1

qui confirme mes pensées, (ne pense pas une serrure peut être nécessaire, mais son un bon point) http://nhforge.org/doc/nh/en/index.html#transactions-optimistic- Manuel – dbones