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

Silverlight Discussion :

[SL4][WCF RIA SERVICES] Besoin de faire 2 SubmitChange


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut [SL4][WCF RIA SERVICES] Besoin de faire 2 SubmitChange
    Bonjour,
    j'ai une classe Compte, une classe Utilisateur, ces 2 classes sont dans mon DomainContext.

    J'ai une page qui me permet d'ajouter un utilisateur. Ce que je souhaite faire lors de l'ajout d'un nouvel utilisateur. C'est ajouter un compte, récupérer l'id du compte (auto increment sur SQL Server), et l'ajouter à mon utilisateur.

    Pour retrouver l'id du compte créé, je peux le faire par linq grâce au libelle du compte qui est unique.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Id_Compte = ((Compte)loadOperation.Entities.First()).Id_Compte;
    voici le code

    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
    16
    17
    18
    19
    20
    21
      private void AjouterUtilisateur()
            {
                //Création d'un compte
                Compte compteUtilisateur = new Compte();
               ....
     
                referentiel.Comptes.Add(compteUtilisateur);
     
                //Ajout du compte dans la Bdd
                referentiel.SubmitChanges(Ajout_Compte_Completed, null);
     
                //Création de l'utilisateur
                this.Utilisateur.Avatar_Utilisateur = String.Empty;
               ......
                this.Utilisateur.Id_Compte_Utilisateur = Id_Compte;
     
                referentiel.Utilisateurs.Add(this.Utilisateur);
     
                //SubmitChanges avec evenement bien passe
                referentiel.SubmitChanges(Ajout_Utilisateur_Completed, null);
            }
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     private void Ajout_Compte_Completed(SubmitOperation submitOperation)
            {
                if (submitOperation.HasError)
                {
                    MessageBox.Show(submitOperation.Error.Message);
                    submitOperation.MarkErrorAsHandled();
                }
                else
                {
                    //Je recupere l'id du compte associé au libelle
                    referentiel.Load<Compte>(referentiel.GetCompteQuery().Where(cpt => cpt.Libelle_Compte == this.Libelle_Compte), Chargement_Compte_Completed, null);
                }
            }
     
            private void Chargement_Compte_Completed(LoadOperation loadOperation)
            {
                if (loadOperation.HasError)
                {
                    MessageBox.Show(loadOperation.Error.Message);
                    loadOperation.MarkErrorAsHandled();
                }
                else
                    Id_Compte = ((Compte)loadOperation.Entities.First()).Id_Compte;
            }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     private void Ajout_Utilisateur_Completed(SubmitOperation submitOperation)
            {
                if (submitOperation.HasError)
                {
                    MessageBox.Show(submitOperation.Error.Message);
                    submitOperation.MarkErrorAsHandled();
                }
                else
                    AppMessage.UpdatePageWithUtilisateur.Send(new Uri("Home", UriKind.Relative), this.Utilisateur);
            }
    mon souci est que j'ai une erreur

    System.InvalidOperationException was unhandled by user code
    Message=A SubmitChanges operation is already in progress on this DomainContext.
    Savez vous comment je peux faire pour ajouter un compte, recuperer son id et ajouter le user sans avoir cette erreur ?

    merci

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    A mon avis il faudrait faire ton code de Création de l'utilisateur dans la callback Ajout_Compte_Completed.

  3. #3
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    je vais tester cela merci

  4. #4
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    Citation Envoyé par Skyounet Voir le message
    A mon avis il faudrait faire ton code de Création de l'utilisateur dans la callback Ajout_Compte_Completed.
    je viens de le faire

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    private void Ajout_Compte_Completed(SubmitOperation submitOperation)
            {
                if (submitOperation.HasError)
                {
                    MessageBox.Show(submitOperation.Error.Message);
                    submitOperation.MarkErrorAsHandled();
                }
                else
                {
                    //Je recupere l'id du compte associé au libelle
                    LoadOperation loadOperation = referentiel.Load<Compte>(referentiel.Get_Compte_Id_By_LibelleQuery(this.Libelle_Compte));
     
                    if (loadOperation.HasError)
                    {
                        MessageBox.Show(loadOperation.Error.Message);
                        loadOperation.MarkErrorAsHandled();
                    }
                    else
                    {
                        Id_Compte = ((Compte)loadOperation.Entities.First()).Id_Compte;
     
                        //Création de l'utilisateur
                        this.Utilisateur.Avatar_Utilisateur = String.Empty;
                      ......
                        this.Utilisateur.Id_Compte_Utilisateur = Id_Compte;
     
                        referentiel.Utilisateurs.Add(this.Utilisateur);
     
                        //SubmitChanges avec evenement bien passe
                        referentiel.SubmitChanges(Ajout_Utilisateur_Completed, null);
                    }
                }
            }
    Ma nouvelle erreur vient de cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Id_Compte = ((Compte)loadOperation.Entities.First()).Id_Compte;
    Il me dit que loadOperation.Entities est vide, ce qui est vrai car le load<Compte> au dessus n'a pas le temps de remonter le compte. Y a t'il un moyen pour lui dire tu attend que le load soit finit et après tu lit le compte.

    ++

  5. #5
    Membre éclairé Avatar de chris81
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 626
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    referentiel.Load<Compte>(referentiel.Get_Compte_Id_By_LibelleQuery(this.Libelle_Compte), Chargement_Compte_Completed, null);
    je viens de faire ceci ça à l'air de lui plaire

  6. #6
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Ben là tu peux remettre l'ancien code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     referentiel.Load<Compte>(referentiel.GetCompteQuery().Where(cpt => cpt.Libelle_Compte == this.Libelle_Compte), Chargement_Compte_Completed, null);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private void Chargement_Compte_Completed(LoadOperation loadOperation)
            {
                if (loadOperation.HasError)
                {
                    MessageBox.Show(loadOperation.Error.Message);
                    loadOperation.MarkErrorAsHandled();
                }
                else
                    Id_Compte = ((Compte)loadOperation.Entities.First()).Id_Compte;
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 27
    Dernier message: 11/08/2011, 22h12
  2. Réponses: 6
    Dernier message: 22/12/2009, 21h11

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