1 votes

Concurrence optimisée de NHibernate

J'étudie la concurrence optimiste dans NHibernate. J'ai un scénario très similaire à celui qui est décrit ici :

http://weblogs.asp.net/stefansedich/archive/2008/10/01/set-the-value-of-a-version-column-in-nhibernate-manually.aspx

Recommanderiez-vous de suivre la solution proposée dans cet article de blog ?

Gracias

3voto

iammichael Points 2789

Le blog suggère d'utiliser un intercepteur pour recharger le numéro de version actuel à partir de la base de données afin d'effectuer un contrôle manuel de la version avec la version transmise par l'entité à partir d'un objet DTO. Cela pourrait certainement fonctionner, mais comme décrit dans l'article, cela ajoute un accès supplémentaire à la base de données pour charger le numéro de version actuel.

La meilleure solution, qui semble assez évidente puisqu'il s'agit en fait de ce qui est décrit dans la documentation pour "Application version checking" comme décrit et cité dans cet article de blog. Il s'agit d'effectuer le contrôle de version sur le fichier initialement entité chargée en utilisant la version de la DTO. Plus précisément, en utilisant le code de l'article (les modifications apportées au code de l'article sont les suivantes en gras ) :

    public void Update(MyDTO dto) {

        // Select the item.
        var item = this.repository.SelectById(dto.Id);

 **// Verify there hasn't been a concurrent change
        if(item.Version != dto.Version)
        {
            throw new StaleObjectStateException();
        }** 

        // Map values from DTO to model.
        item.Name = dto.Name;
        **~~item.Version = dto.Version;~~**

        // Call update
        this.repository.Update(item);   

    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X