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

Linq Discussion :

Problème Ajout Donnée avec Entity Framework


Sujet :

Linq

  1. #1
    Invité
    Invité(e)
    Par défaut Problème Ajout Donnée avec Entity Framework
    Bonjour,

    J’ai un petit souci avec mon application Silverlight 3. Avant tout, voici un petit point sur l’architecture et le but de mon application.

    Tout d’abord, le but de l’application est de permettre aux utilisateurs d’insérer des données dans une table de la base de production en vérifiant au préalable que plusieurs conditions sont remplies (champs correctement renseignés, valeurs des tables liées existantes, …).

    Pour schématiser, l’utilisateur sélectionne un fichier XML depuis l’application. Les données sont automatiquement ajoutées à une table de la base A (qui n’est pas la base de prod). Sur un autre écran de l’application, l’utilisateur peut consulter les données présentes dans cette table et les analyser (on vérifie que tout est bien rempli, que les données spécifiées en tant que clé étrangère existent bien, …). Si tout est ok, l’utilisateur clique sur un bouton pour lancer l’intégration « réel » des données sur la base de production.

    Il s’agit donc d’une application Silverlight 3 utilisant .NET RIA Services. Dans la partie Web de ma solution, j’utilise la technologie Entity Framework pour accéder à ma base de données. A noter que j’ai généré deux models Entity Framework :

    - un pour la base A qui est une base de dev on va dire (une seule table concernée)
    - un pour la base B qui est celle de production (plusieurs tables concernées)

    J’ai créé un « Class Domain Service » pour le model de la base A. Depuis la partie Silverlight, je peux donc appeler mon Domain Service afin de faire des requêtes, des ajouts, des modifs et des suppressions sur la table de la base A.

    Jusque là, rien de bien compliqué.

    Quand l’utilisateur clique sur le bouton pour analyser (ou lorsqu’il effectue une modification sur une donnée), j’exécute une méthode sur mon Domain Service qui effectue différents contrôles et notamment quelques vérifications sur la base B. Là, ça fonctionne parfaitement.

    Imaginons qu’il s’agit de Facture. Chaque facture fait référence à un Client. Ma méthode d’analyse vérifie que le client spécifié existe réellement en prod. Ca donne ça par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    // Contrôle sur le client
                var q = (from c in mesEntities.client where c.Ref_Cli.Equals(maFacture.CLIENT) select c.Ref_Cli).FirstOrDefault();
                if (string.IsNullOrEmpty(q) == false)
                {
                    maFacture.CLIENT = q.ToString();
                    maFacture.ISEXISTCLIENT = true;
                }
                else
                {
                    maFacture.ISEXISTCLIENT = false;
                    maFacture.ISERREURFACTURE = true;
                }
    Selon les cas, je met certains booléen à true ou à false afin de savoir quelle facture je peux ensuite intégrer à la prod ou non.

    Donc comme je l’ai dis, j’arrive parfaitement à interroger mes entités de ma base B afin d’effectuer mes contrôles.

    Le problème vient des ajouts (ou modifs). Quand l’utilisateur clique sur le bouton pour intégrer en prod, je reprends chaque élément présent dans la table de la base A qui n’est pas en erreur et je tente de l’ajouter à la table de la base B.

    Par exemple, je mets ça dans la méthode de mon Domain Service (qui concerne la table de la base A je rappelle) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    facture uneFacture = new facture()
    {
    	Id_Fact = maFacture.ID,
    	Des_Fact = maFacture.DES,
    	Client = (mesEntities.client.Where(cli => cli.Ref_Cli == mesFactures.CLIENT).First())
    }
    mesEntities.AddToFacture(uneFacture) ;
    mesEntities.SaveChanges() ;
    Pour moi, l’ajout devrait se faire dés que je dis mesEntities.SaveChanges().
    Mais non. Rien ne se produit. Après avoir cherché quelques dizaines de minutes, j’ai remarqué qu’en cliquant sur mon bouton Submit de mon application Silverlight, l’ajout se faisait enfin.

    Ce que je ne comprends pas trop, c’est pourquoi.

    Mon bouton Submit fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dataFormFacture.CommitEdit();
    source.SubmitChanges();
    Sachant que source fait référence aux données de la table de la base A. Pourquoi dois-je cliquer sur ce bouton pour valider des modifs faites sur la base B alors que cette base n’est pas concernée par mon Domain Service.

    SaveChanges() ne devrait-il pas suffire ?

    J'espère avoir été assez clair et que quelqu'un pourra m'aider.

    Ps : mesEntities fait référence au model EF de la base B bien sur
    Dernière modification par Invité ; 14/10/2009 à 10h57.

  2. #2
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    et le dataFormLogement.CommitEdit();, à quoi fait-il référence ?
    Si tu le met après ton SaveChanges est-ce que ça change quelque chose ?

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laedit Voir le message
    et le dataFormFacture.CommitEdit();, à quoi fait-il référence ?
    Si tu le met après ton SaveChanges est-ce que ça change quelque chose ?
    dataFormFacture.CommitEdit() fait référence au DataForm présent sur mon application cliente. Tu as une grille et un dataform pour avoir une vue Maitre/Détails.

    C'est le code basique pour enregistrer les modifs faites sur le DataForm (qui affiche les données de la table de la base A).

  4. #4
    Membre émérite
    Avatar de laedit
    Homme Profil pro
    Consultant études et développement
    Inscrit en
    Décembre 2006
    Messages
    1 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consultant études et développement
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 344
    Points : 2 265
    Points
    2 265
    Par défaut
    Bah normalement, d'après MSDN (http://msdn.microsoft.com/en-us/libr...VS.100%29.aspx) l'appel de SaveChanges devrait suffire.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par laedit Voir le message
    Bah normalement, d'après MSDN (http://msdn.microsoft.com/en-us/libr...VS.100%29.aspx) l'appel de SaveChanges devrait suffire.
    Ouai, j'avais lu la même chose. C'est assez étrange. Je vois pas trop comment le "source.SubmitChanges" côté client peut influencer sur les données que j'ajoute à mon second modèle (base B) puisque, logiquement, source.SubmitChanges concerne les modifcations effectuées sur la table du premier modèle (base A).

Discussions similaires

  1. [Débutant] Lier les données avec Entity Framework
    Par cedric1313 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 27/01/2015, 09h23
  2. Problème déploiement Application Web avec Entity FrameWork
    Par alenguard dans le forum Entity Framework
    Réponses: 2
    Dernier message: 07/03/2012, 16h25
  3. Problème démarrage avec Entity Framework
    Par heloise77u2 dans le forum Entity Framework
    Réponses: 2
    Dernier message: 06/09/2011, 17h34
  4. Choisir la base de données fichier à utiliser avec Entity Framework
    Par Lucas Panny dans le forum Accès aux données
    Réponses: 10
    Dernier message: 01/08/2011, 16h03
  5. problème ajout données avec db.execute et access
    Par Dauphind dans le forum Access
    Réponses: 2
    Dernier message: 29/11/2005, 12h03

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