2016-12-23 1 views
0

J'ai ce morceau de code mais cela ne fonctionne pas, et je ne vois pas où id le problème.Entity Framework SaveChanges ne fonctionne pas

Aucune exception n'est détectée.

Je travaille avec Entity Framework 4. L'appel SaveChanges ne semble rien faire dans la base de données.

try 
{ 
    Demande_Rage_Animale editdemande = DemandeRageAnimaleDAO.First(s => s.ID == demandebean.ID); 

    //frombeanTodemande(demandebean, editdemande); 
    editdemande.num_rapport = "111111"; 

    //editdemande.EntityState. 
    DemandeRageAnimaleDAO.SaveChanges(); 
} 
catch (Exception ex) 
{ 
    Logger.Error("==> Modifier_demande_RageAnimale : " + ex.InnerException); 
} 
+0

Quel est le 'InnerException' message? – G0dsquad

+0

Pourriez-vous également publier l'implémentation de 'DemandeRageAnimaleDAO'? – Marc

+0

Pouvez-vous fournir le message d'exception? –

Répondre

7

Vous devez marquer l'entité telle que modifiée avant d'appeler SaveChanges:

DemandeRageAnimaleDAO.Entry(editdemande).State = EntityState.Modified; 
DemandeRageAnimaleDAO.SaveChanges(); 

Dans les anciennes versions de Entity Framework vous pouvez utiliser ceci:

DemandeRageAnimaleDAO.ObjectStateManager.ChangeObjectState(editdemande, System.Data.EntityState.Modified); 

Il est possible que la méthode indiquée dans la question n'est pas l'image complète et peut-être que l'entité s'est détachée. Dans ce cas, vous pouvez le joindre retour au contexte, le marquer comme SaveChanges modifiés et appel:

var editdemande = DemandeRageAnimaleDAO.First(s => s.ID == demandebean.ID); 

// whatever happens here? 

DemandeRageAnimaleDAO.Demande_Rage_Animale.Attach(editdemande); 
editdemande.num_rapport = "111111"; 
DemandeRageAnimaleDAO.ObjectStateManager.ChangeObjectState(editdemande, System.Data.EntityState.Modified); 
DemandeRageAnimaleDAO.SaveChanges(); 
+1

Sans exception levée, cela semble être la bonne réponse. – G0dsquad

+0

gravité \t code \t Description de \t projet \t fichier \t ligne \t d'état de suppression Erreur \t CS1061 \t 'IGenericDAO ' ne contient pas de définition pour 'entrée' et aucune méthode d'extension 'Entrée' accepter un premier argument de type « IGenericDAO 'peut être trouvé (manque-t-il une directive using ou une référence d'assembly?) – fatiDev

+0

Est-ce que la méthode montrée dans la question est complète ou avez-vous manqué des pièces? Le code donné dans les deux réponses devrait fonctionner correctement. Quel est le type d'objet 'DemandeRageAnimaleDAO'? Je supposais que c'était votre contexte de base de données généré par Entity Framework. – Equalsk

1

Le contexte de l'objet doit connaître l'état d'un objet pour enregistrer les modifications aux objets source.ObjectStateEntry de données stocker les informations EntityState. Les méthodes SaveChanges du ObjectContext traitent les entités attachées au contexte et mettent à jour la source de données en fonction de l'EntityState de chaque objet. Pour plus d'informations, consultez Création, ajout, modification et suppression d'objets.

Dans votre cas en utilisant EF 4.0 vous devez appeler ce

_yourContext.ObjectStateManager.ChangeObjectState(editdemande, System.Data.EntityState.Modified); 

avec la version 4.1 de son fait comme

_yourContext.Entry(editdemande).State = System.Data.EntityState.Modified; 
+0

ce code semble fonctionner, mais toujours rien n'a changé – fatiDev

+1

Que faire si vous appelez 'ChangeObjectState()' et utilisez 'Attach (editdemande)'? Ici vous avez doc https://msdn.microsoft.com/en-us/library/jj592676(v=vs.113).aspx –

+0

il donne ceci: {"L'objet ne peut pas être attaché car il est déjà dans le contexte de l'objet Un objet ne peut être rattaché que lorsqu'il est dans un état inchangé. "} – fatiDev