IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Presentation Foundation Discussion :

Bind, DataContext via LINQ & Concurrence


Sujet :

Windows Presentation Foundation

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut Bind, DataContext via LINQ & Concurrence
    Bonjour

    J'aurai besoin de quelques éclaircissements. Mon application est une interface administration qui se présente (en résumé) comme tel :
    - VisualStudio 2008, SQL Server, C# 3, DotNet 3.5
    - WPF pour faire une Interface web (ie XBAP)
    - LINQ to SQL pour faire le lien avec la BD, qui se matérialise par un DataContext et des Table<MaTable1> dans mon code.
    - A l'occasion, je crée une fenêtre me permettant d'éditer directement les propriétés d'un enregistrement de la table.

    Mon dilemme est le suivant :
    1. avoir une fenêtre "modifier enregistrement" unique. IE me battre avec la modification de la classe pour la mettre sous la forme du design pattern Singleton, ce que je n'ai pas encore réussi à faire proprement : il faut forcer WPF à faire appel au GetInstance() à la place du constructeur apr défaut et c'est la misère.
    2. autoriser plusieurs fenêtres. Ca me parait plus "user friendly", mais la grosse question : comment est gérée la concurrence ? Actuellement, mon DataContext est la Table<MaTable1> sont static. Est ce que je peux locker en écriture un enregistrement via le DataContext ?

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Citation Envoyé par Nalfeim Voir le message
    Mon dilemme est le suivant :
    1. avoir une fenêtre "modifier enregistrement" unique. IE me battre avec la modification de la classe pour la mettre sous la forme du design pattern Singleton, ce que je n'ai pas encore réussi à faire proprement : il faut forcer WPF à faire appel au GetInstance() à la place du constructeur apr défaut et c'est la misère.
    2. autoriser plusieurs fenêtres. Ca me parait plus "user friendly", mais la grosse question : comment est gérée la concurrence ? Actuellement, mon DataContext est la Table<MaTable1> sont static. Est ce que je peux locker en écriture un enregistrement via le DataContext ?
    J'ai rien compris

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut
    J'ai été pas clair à ce point ? Bon, oublions le contexte.

    Le fichier "D_Objet.xaml.cs" commence par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public partial class D_Objet : Window
        {
            private static D_Objet instance;
     
            private static DataContext db = new LINQtoSQLDataContext();
            private Table<I_OBJETS> table_objets = db.GetTable<I_OBJETS>();
     
            //et dans le constructeur j'appelle
            private void Lier_aux_donnees(int id)
            {                     
                base.DataContext = 
                    from o in objets
                    where o.ID_OBJET == id
                    select o;                          
            }
    Et dans le "D_Objet.xaml" j'ai entre autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <Label Grid.Column="0" Grid.Row="0">Identifiant objet</Label>
            <TextBox Grid.Column="1" Grid.Row="0" IsEnabled="False" 
                     Text="{Binding Path=ID_OBJET}" />
    Ma question, c'est que se passe t'il au niveau du DataContext si j'ai X fenêtres (pour des objets différents) ouverte en même temps dont le contenu est modifié puis enregistré (ie base.DataContext.SubmitChanges() ) dans le désordre ?
    Est ce qu'il va tout enregistrer, ou par exemple ne prendre en compte que le dernier SubmitChange ?

  4. #4
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    bah ça dépend de comment sont configurées tes entités... Tu veux utiliser quelle méthode pour gérer la concurrence ? Timestamp ? Autre chose ?
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut
    J'aimerai justement savoir comment ca se règle, qu'est ce qu'y a de disponible pour arrêter une décision à ce sujet :
    - n'autoriser qu'une seule fenêtre d'édition à la fois (un peu galère à mon gout)
    - verrouillage en écriture du premier arrivé
    - autre chose ?

  6. #6
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    Par défaut, dans un cas comme tu l'exposes, c'est le dernier qui parle qui a raison (me semble-t-il).

    Il faut que tu mettes en place une gestion de la concurrence et je dois admettre que n'autoriser qu'une seule fenêtre d'édition à la fois, même si cela te semble galère, me semble le mieux. Mais après, cela dépend du contexte, de l'application, etc...

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    196
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 196
    Par défaut
    Niveau contexte, il s'agit d'une interface administrateur, qui doit en l'occurence permettre l'édition de script de configuration définis par arborescence I_OBJET/I_ITEM/etc (en gros).

    Dans l'idée je m'inspire d'un éditeur de code quelconque : on aime bien pouvoir ouvrir l'objet X pour garder à l'oeil / s'inspirer de ce qu'il y a dedans en modifiant l'objet Y.
    De plus, si je met en place un singleton sur la fenêtre d'édition I_OBJET, il ne bloque pas les modifs du I_ITEM fils, ce qui pourrait mal finir.

    J'envisage donc sérieusement une gestion de concurrence. Quelqu'un a un bon tutorial DataContext/Concurrence ?

  8. #8
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Par défaut
    Je n'ai pas de tuto sous la main, mais voici une idée de départ :
    Un champ timestamp dans tes entités peut être géré par Linq to SQL pour gérer les accès concurrents. Quand tu veux sauvegarder un élément, il teste la valeur de ce champ avec la valeur qui existe en base, si une nouvelle version existe en base, tu as une exception concurrencyQuelquechose qui est déclenchée, ça te permet de savoir quand il y a un problème de concurrence.

    Tu peux aussi utiliser l'événement Activated de tes form pour regarder si l'entité active n'a pas été modifiée entre temps et proposer à l'utilisateur de recharger l'entité (ou pas).
    Besoin d'un MessageBox amélioré ? InformationBox pour .NET 1.1, 2.0, 3.0, 3.5, 4.0 sous license Apache 2.0.

    Bonnes pratiques pour les accès aux données
    Débogage efficace en .NET
    LINQ to Objects : l'envers du décor

    Mon profil LinkedIn - MCT - MCPD WinForms - MCTS Applications Distribuées - MCTS WCF - MCTS WCF 4.0 - MCTS SQL Server 2008, Database Development - Mon blog - Twitter

  9. #9
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Par défaut
    La technique évoquée par SaumonAgile est intéressante et on en parle ici:http://weblogs.asp.net/bschooley/arc...n-asp-net.aspx

    Regarde aussi ce lien:

    http://msdn.microsoft.com/en-us/library/bb399389.aspx

Discussions similaires

  1. Requête d'analyse via LINQ
    Par nlips dans le forum Linq
    Réponses: 2
    Dernier message: 12/01/2014, 12h19
  2. [Débutant] Cloner une liste via LINQ
    Par shaun_the_sheep dans le forum C#
    Réponses: 6
    Dernier message: 07/10/2013, 17h43
  3. DataGridView via Linq qui reste vide
    Par sphynxounet dans le forum C#
    Réponses: 3
    Dernier message: 16/09/2010, 11h12
  4. Pbm Binding Datagridview WPF (& LINQ)
    Par cr0mat dans le forum Windows Presentation Foundation
    Réponses: 2
    Dernier message: 13/12/2009, 22h47
  5. [WPF] ComboBox, binding avec association LINQ
    Par tomlev dans le forum Windows Presentation Foundation
    Réponses: 11
    Dernier message: 30/04/2008, 00h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo