none
Problème insertion EntityFramework (2 tables avec relation 1-n) RRS feed

  • Question

  •  

    Bonjour tout le monde,

     

    En fait j'utilise EntityFramework pour manipuler ma base de données. Ma base contient 2 tables:  

    Table1 : Magasin  (idMagasin, Nom, Pays, Addresse, ...) sachant que la clé primaire et idMagasin.

    Table2 : Produit (idProduit,idMagasin, Marque, DebutValidité, FinValidité, ...) sachant que la clé primaire et idProduit

    et la clé étrangère et idMagasin;

     

    Maintenant je souhaite insérer une ligne dans la table Produit. Alors j'écris la fonction suivante:

    ///je passe produit comme paramètre

    public void AddProduit(Produit produit)

    {

    context.AddToProduit(produit);

    context.SaveChanges();

    }

    }

     

     

    Malheureusement ça lance l'exception suivante :

     

    "L'objet ne peut pas être ajouté à ObjectStateManager, car il a déjà EntityKey. Utilisez ObjectContext.Attach pour attacher un objet qui a déjà une clé."

     

    Est ce que vous avez une idée;

    Merci en avance

    jeudi 15 janvier 2009 09:52

Réponses

  • Bonjour matthieu,

     

    J'ai lu ton blog et c'était vraiment fructueux.

     

    C'est bonne explication, et la solution est en fait de créer un produit , de lui affecter un magasin,  et enfin d'utiliser

     

    directement la methode SaveChanges() (il va être relié directement à l'EntityKey du magasin).

     

    C'est un comportement assez surprenant  (puisque je ne fais pas un  AddToProduit) mais c comme ça !!!

     

     

    Merci énormement

    jeudi 15 janvier 2009 15:16

Toutes les réponses

  • En fait c'est très simple

    Comment as-tu créé ton Produit (que tu passes en paramètre) ? De toute évidence, ce produit est déjà attaché à un ObjectContext. C'est pour ça que tu as un EntityKey d'où ton erreur.

    Une des explications les plus vraissemblable est le fait qu'en créant ton produit, tu lui affectes un magasin. Ceci a pour effet d'attacher ton produit au contexte dans l'état Added. Cela signifie donc que tu n'as pas besoin de faire le AddProduit avant le SaveChanges.

    Pour plus d'infos sur le sujet, je t'invite à regarder un post que j'avais écrit : http://blogs.codes-sources.com/matthieu/archive/2008/06/05/les-relations-avec-l-entity-framework-probl-matique-d-ajout-d-entit.aspx

     

    jeudi 15 janvier 2009 14:53
  • Bonjour matthieu,

     

    J'ai lu ton blog et c'était vraiment fructueux.

     

    C'est bonne explication, et la solution est en fait de créer un produit , de lui affecter un magasin,  et enfin d'utiliser

     

    directement la methode SaveChanges() (il va être relié directement à l'EntityKey du magasin).

     

    C'est un comportement assez surprenant  (puisque je ne fais pas un  AddToProduit) mais c comme ça !!!

     

     

    Merci énormement

    jeudi 15 janvier 2009 15:16