2010-11-16 4 views
2

Je récupère un séjour via un service WCF et le passe au frontal. Un utilisateur met à jour les données sur cet objet puis il est renvoyé au service WCF.Les mises à jour du framework d'entité sont silencieusement ignorées

Le code suivant fonctionne correctement pour ajouter de nouveaux séjours, mais il ignore silencieusement les mises à jour. Qu'est-ce que je rate?

UpdateStay public void (ResidentDataTypes.Stay séjour)

{ 
     using (ResidentDataTypes.ResidentEntities entity = new ResidentDataTypes.ResidentEntities()) 
     { 
      if (stay.StayId == Guid.Empty) 
      { 
       entity.Stay.AddObject(stay); 
      } 
      else 
      { 
       entity.Stay.ApplyChanges(stay); 
      } 
      entity.SaveChanges(); 
     } 
    } 

Répondre

1

Lorsque vos objets sérialisés de WCF, ils sont dans un état indépendant et EF ne génère pas de déclaration mise à jour pour eux. Vous avez 2 options:

1. Obtenir le même objet à partir de la base de données, puis faites un ObjectSet.ApplyCurrentValues:

using (ResidentDataTypes.ResidentEntities context = new 
              ResidentDataTypes.ResidentEntities()) 
{ 
    if (stay.StayId == Guid.Empty) 
    { 
     context.Stay.AddObject(stay); 
    } 
    else 
    { 
     // Fetch the Stay object into the cache: 
     context.Stay.First(s => s.StayId == stay.StayId); 

     // Now ApplyCurrentValues from the stay object coming from WCF: 
     context.Stay.ApplyCurrentValues(stay); 
    } 
    entity.SaveChanges(); 
} 


changer 2.Manually l'état détaché à jour:

using (ResidentDataTypes.ResidentEntities context = new 
              ResidentDataTypes.ResidentEntities()) 
{ 
    if (stay.StayId == Guid.Empty) 
    { 
     context.Stay.AddObject(stay); 
    } 
    else 
    {   
     // Attach the stay object coming from WCF to ObjectContext: 
     context.Stay.Attach(stay); 

     // The attached object is going into Unchanged mode after attaching 
     // so we need to change the state to Modified: 
     context.ObjectStateManager.ChangeObjectState(stay, EntityState.Modified); 
    } 
    entity.SaveChanges(); 
} 
+0

OK, ça marche pour le 'Stay'. Donc, si j'ai aussi des mises à jour d'objets enfants, est-ce que je dois aussi charger tous ces objets? – Biggle10

+0

Oui. * ApplyCurrentValues ​​* ne fonctionne qu'avec les propriétés scalaires sur une seule entité et ne prendra en compte aucun objet enfant que votre entité pourrait avoir. –

0

i pense que vous devez attacher votre entité à votre contexte avec quelque chose comme

entity.Attach(stay) 
Questions connexes