Bonjour,

je rencontre un souci dans l'utilisation de EF 4 en mode DB First.

J'ai une liste de Catégorie, qui comprend une liste d'actions, chaque action comprend une liste d'ActionAfficheur (relation 1 - n dans les deux cas donc).

Je charge mes données depuis un contexte A dans un usage WPF (application 2 tiers : Affichage et entités).

le chargement des données n'est pas un souci, je crée mon premier contexte A pour cela. Suite à des modifications, je veux sauvegarder mes données, donc j'ouvre un nouveau contexte, le B.


Si je ne fais que modifier des propriétés type String dans ces classes, pas de souci. Mais si j'ajoute un nouvel objet ActionAfficheur à une instance d'Actions existante, je reçois une exception, dépendant de comment je procède pour sauvegarder.


Si je tente de sauvegarder en partant de la liste terminale des ActionAfficheur après un selectMany pour les récupérer, je reçois l'erreur suivante (après un appel à AddObject) :
The EntityKey property can only be set when the current value of the property is null.
et l'entityKey passe d'une valeur générée et d'un EntityState added à null & detached...

Si je tente de sauvegarder en partant de la liste des categories en iterant dessus, lors que je traite la catégorie qui comprend l'action qui a reçu un nouvel ActionAfficheur, je recois l'erreur suivante :
An object with a temporary EntityKey value cannot be attached to an object context.
et l'entityKey est passé de unchanged à null & detached.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
/// C'est le même corps de fonction pour la mise à jour des Categorie, Action et ActionAfficheur, en remplacant juste la liste de destination
public void Update(OPIAEntities context)
        {
            if (this.EntityKey == null || this.EntityKey.IsTemporary || this.EntityKey.EntityKeyValues == null)
                context.Categorie.AddObject(this); //Si c'est nouvel item, je l'ajoute à ma liste
 
            else
            {
                try 
                {
                    context.Categorie.Attach(this);
                }
                catch(Exception ex)
                {//Debug
                }
 
                if (this.MarkAsDeleted == false)
                    context.ObjectStateManager.ChangeObjectState(this, System.Data.EntityState.Modified);
 
                else
                    context.DeleteObject(this);
            } 
        }
Pour la catégorie, je fail sur le Attach, pour le nouvel ActionAfficheur, je fail sur le Add


Merci pour votre aide