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

Entity Framework Discussion :

Erreur lors d'un Update et delete [Entities Framework : FW 4.0]


Sujet :

Entity Framework

  1. #1
    En attente de confirmation mail
    Inscrit en
    Mars 2004
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 53
    Points : 31
    Points
    31
    Par défaut Erreur lors d'un Update et delete [Entities Framework : FW 4.0]
    Bonjour,
    J'ai commencé à développé une application,j'ai choisi Entity Frame Work pour accéeder aux données.

    J'ai crée la classe d'extension ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     static public class EntityObjectExtends 
        {
            public static void Add( this EntityObject objToAdd)
            {
                WPFEFEntities db = new WPFEFEntities();
                db.AddObject(objToAdd.GetType().Name, objToAdd);
                db.SaveChanges();
            }
            public static void Delete(this EntityObject objToDelete)
            {
                WPFEFEntities db = new WPFEFEntities();           
                db.DeleteObject(objToDelete);
                db.SaveChanges();
            }
            public static void Update(this EntityObject objToUpdate)
            {
                WPFEFEntities db = new WPFEFEntities();
                db.Refresh(System.Data.Objects.RefreshMode.ClientWins, objToUpdate);
                db.SaveChanges();
            }
            public static void CancelUpdate(this EntityObject objToCancelUpdate)
            {
                WPFEFEntities db = new WPFEFEntities();
                db.Refresh(System.Data.Objects.RefreshMode.StoreWins, objToCancelUpdate);
                db.SaveChanges();
            }
     
        }
    L'ajout fonctionne très bien mais la pendant la modification et la suppression il y des erreux dont les messages sont aux dessous :

    Erreur Modification :
    The element at index 0 in the collection of objects to refresh has a null EntityKey property value or is not attached to this ObjectStateManager
    Erreur Suppression :
    The object cannot be deleted because it was not found in the ObjectStateManager.
    j'ai pas pu résoudre e problème.

    il y quelqu'un peut m'aider, je serai tres reconnaissant .
    Merci d'avance

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Pour faire un update ou delete il faut que tu récupères l'object dans ton contexte.

    Avec Entity Framework (quelle version d'ailleurs) tu devrais avoir quelque chose comme ça :

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    using (CustomerDBEntities context = new CustomerDBEntities())
                {
                    try
                    {
                        context.Connection.Open();
     
                        try
                        {
                            Client c = (from c in context.Clients
                                       where c.ClientID.Equals(paramID, StringComparison.CurrentCultureIgnoreCase)
                                       select c).First();
                        }
                        catch (Exception) { /* Client does not exist in database */ }
     
                        if (c!= null)
                        {
                            c.Name = paramName;
                        }
                        context.SaveChanges();
                        context.Connection.Close();
                    }
                    catch(Exception) { /* Cannot access to the database */ }
                }

    Le nom des méthodes liées au contexte varie selon la version du framework...
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  3. #3
    En attente de confirmation mail
    Inscrit en
    Mars 2004
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    Merci Er3van pour ta réponse,
    Les méthodes que j'ai utilisées existe dans la framework 4.0.
    Moi je pense que le problème dans le dataContext à le quel est attaché l'objet concernant (à modifier ou à supprimer), puisque l'objet est instancié à partir d'un datacontext x et je veux ajouter à partir d'un nouveau datacontext.
    J'ai chercher comment détacher l'objet d'un contexte est je n'ai pas trouver
    que dataContext.Detach mais j'ai pas garder la reférence du dataContext d'origine.

    Est ce qu'il y a un moyen de détacher un EntityObject de son dataContext sans passer du dataContext parce que j'évite de faire un traitement pour ça manuellement(sorte de clone).

    j'utilise le framework 4.0

  4. #4
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    A la vue de ton code tel qu'il est, à mon avis le problème vient du fait que tu tentes un refresh sur un objet qui est récupéré via un context différent de WPFEFEntities. Quel est le context original ?

    Quelle est la structure de ton application ?
    La classe EntityObjectExtends hérite de quelque chose ? (si oui ce n'est pas dans ton bout de code...)

    Pourquoi as-tu besoin de changer de contexte en le moment où tu récupères l'objet et le moment où tu le mets à jour ?
    One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

    -- Chuck Palahniuk, Fight Club, Chapter 3 --

  5. #5
    En attente de confirmation mail
    Inscrit en
    Mars 2004
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 53
    Points : 31
    Points
    31
    Par défaut
    merci Er3van

    oui c'est ça, le problème est du à l'utilisation d'un datacontext différent de celui de chargement.

    et pour résoudre" ce problème il ya deux solution, soit utiliser un seul dataContext pour tout le projet soit la recherche de l'objet dans le nouveau dataContext par son ID puis l'initialise par les propriétés de l'objet à enregistrer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public static void Update(this EntityObject objToUpdate)
            {
                WPFEFEntities db = new WPFEFEntities();
                EntityObject tmpObj = (EntityObject)db.GetObjectByKey(objToUpdate.EntityKey);
                tmpObj = db.ApplyCurrentValues(objToUpdate.GetType().Name, objToUpdate);
     
                db.SaveChanges();
                //ContexteDAO.ContexteDonnees.SaveChanges();
            }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur lors d'un update
    Par harjer dans le forum VBA Access
    Réponses: 5
    Dernier message: 20/11/2007, 11h07
  2. [SQL] erreur lors d'un update
    Par opeo dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/09/2007, 14h45
  3. erreur lors d'un update d'une base de données
    Par tibtibby dans le forum ASP
    Réponses: 1
    Dernier message: 09/06/2006, 14h30
  4. [ADO.Net][Access] Pourquoi ai-je une erreur lors de l'Update ?
    Par nazimb dans le forum Accès aux données
    Réponses: 1
    Dernier message: 15/05/2006, 09h37
  5. Erreur lors d'un Update en SQlserver
    Par kedig dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 30/08/2005, 08h22

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