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

Framework .NET Discussion :

[EF] Architecture SOA et ajout d'une entité


Sujet :

Framework .NET

  1. #1
    Membre du Club

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 48
    Points
    48
    Par défaut [EF] Architecture SOA et ajout d'une entité
    à tous,

    Voilà j'ai un petit souci au niveau d'Entity Framework.

    J'ai une architecture SOA que j'ai mise en place avec WCF :
    - Le serveur est une application utilisant ServiceHost pour présenter les services + une base de donnée SQL Server 2008 express.
    - Le client est une application WPF utilisant ClientBase<I> pour se connecter aux services.
    - Le fichier edmx est contenu dans un projet référencé par le serveur et le client.

    Pour ajouter une nouvelle entité en base, j'ai un service "AddPersonne(Personne p)" que j'appelle depuis le client après avoir créé une entité Personne et l'avoir rempli.

    A noter que cette entité Personne contient elle même d'autres entités, comme une entité Adresse (créée coté client) et un sexe (issue d'une liste d'entités).

    Code du service :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void AddPersonne(Personne p)
    {
       context.AddToPersonne(p);
       context.SaveChanges();
    }

    Lorsque j'exécute l'application et que j'ajoute une personne au contexte avec context.AddToPersonne(p);, une exception de type "InvalidOperationException" est lancée avec le message "Un objet ayant la même clé existe déjà dans ObjectStateManager. ObjectStateManager ne peut pas assurer le suivi de plusieurs objets ayant la même clé."

    Quand l'entité arrive, son EntityState est Detached et son EntityKey est null.
    Lorsque l'exception est levée, son EntityState est Added et son EntityKey est "EntitySet=Personne".

    Pour contourner ce problème, du coté serveur je recrée (Adresse) ou récupère (Sexe) toutes les entités et passe les valeurs de la personne reçue. Mais c'est moche et long à faire.

    Merci de m'aider, je ne vois pas où est le problème.

  2. #2
    Membre du Club

    Profil pro
    Inscrit en
    Juin 2008
    Messages
    46
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2008
    Messages : 46
    Points : 48
    Points
    48
    Par défaut
    En continuant de chercher, je pense que c'est peut être du au fait que l'objet personne est instancié du coté client et non serveur.

    Cela est-il dû au fait qu'il fait référence à d'autres entités ?

  3. #3
    Membre habitué
    Avatar de jgard
    Profil pro
    Inscrit en
    Août 2009
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2009
    Messages : 67
    Points : 140
    Points
    140
    Par défaut
    Bonjour,

    Il vaut mieux en effet créer ton entité côté serveur ou bien faire un mapping dans ton service entre l'entité que tu as créée côté client(un DataContract donc) et une nouvelle entité de ton edmx que tu ajouteras à ton contexte.

    Par contre, pourquoi fais-tu référence à ton projet avec l'edmx côté client ?
    Si on considère que l'edmx remplace une DAL classique, elle ne peut en principe être appelée que par une autre couche Business ou service et pas par le client directement(sauf s'il n'y a que ces deux couches bien sûr). Le problème vient peut-être aussi en partie de là si tu utilises directement le type de ton edmx plutôt que le DataContract Personne généré par WCF pour pouvoir être appelé du client.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/05/2014, 20h28
  2. [EF] Ajouter une entité
    Par bellak dans le forum Accès aux données
    Réponses: 5
    Dernier message: 05/01/2012, 13h11
  3. [AC-2007] ajout d'une entité mais risque de doublons
    Par Prisss dans le forum Modélisation
    Réponses: 1
    Dernier message: 16/06/2010, 14h55
  4. Réponses: 1
    Dernier message: 27/02/2009, 09h32
  5. ajouter une colonne a une entité qui ne sera pas mappé
    Par *alexandre* dans le forum Hibernate
    Réponses: 3
    Dernier message: 02/10/2008, 09h59

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