à 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.
Partager