2010-12-14 53 views
0

J'essaie de remplacer un objet par un nouveau et j'obtiens l'exception mentionnée. J'ai essayé plusieurs combinaisons et je n'arrive pas à m'en sortir.Services de données Silverlight + WCF obtenant InvalidOperationException: Le contexte suit déjà une entité différente avec la même ressource Uri

J'ai une liste de lecture qui a des éléments (les objets a un autre objet imbriqué, mais je le laisse sortir pour aider à rendre ma question plus claire. L'utilisateur peut modifier les éléments sont dans la liste de lecture.

if (playlistChanged) 
{ 
    // remove selectedForRemoval 
    IEnumerable<PlaylistItemViewModel> nonSelectedItems = selectedDisplayTemplates.Where(pivm => pivm.IsSelectedForRemoval); 
    foreach (temViewModel ivm in nonSelectedItems) 
    { 
     context.DeleteObject(ivm.Model);   
    } 

    // clear out and remove old items 
    foreach (Item item in playlist.PlaylistItems) 
    { 
     context.DeleteObject(item); 
    } 

    playlist.PlaylistItems.Clear(); 

    // add the selectedItem(s) to the playlist 
    // these items can be from the Media, or other tables 
    // so are newly created in code on the client   
    foreach (ItemViewModel ivm in selectedItems) 
    { 
     playlist.Items.Add(ivm.PlaylistItemModel); 
     context.AddToItems(ivm.PlaylistItemModel); 
    } 
    context.BeginSaveChanges(SaveChangesOptions.Batch, new AsyncCallback((iar) => 
    { 
     try 
     { 
      // Callback method for the async request, retrieves the status of the requested action 
      DataServiceResponse response = context.EndSaveChanges(iar); 
     } 
     catch (DataServiceRequestException) 
     { 
      throw; 
     } 
    }), context); 
} 

Toute aide est appréciée

EDIT:... je PRÉPONDÉRANTS Egaux et ToString dans playlist classe partielle Après avoir enlevé ceux-ci, il a commencé à travailler

Répondre

1

Je remplaçais les classes partielles Equals et ToString dans Playlist dans Silverlight. Après avoir enlevé ceux-ci, ça a commencé à fonctionner. Je vais éviter cela à partir de maintenant avec WCF Data Services.

0

Si vous alla chercher les données à l'aide d'un contexte différent de celui que vous essayons d'ajouter/supprimer wi Vous obtiendrez l'exception que vous avez affichée. Vous pouvez soit disposer du contexte d'origine avec lequel vous avez récupéré les données, soit appeler explicitement Détacher sur l'élément que vous appelez AddItem/DeleteObject.

+0

Merci, j'utilise le même contexte pour récupérer la playlist et les éléments. Puis quand ils sélectionnent un article différent, j'en crée un nouveau dans le code sur le client (j'ai ajouté un commentaire au code de ma question). Je me demande pourquoi le contexte devient confus. – Aligned

+0

Vous n'avez donc jamais qu'un seul contexte? – Jeff

+0

Sauf si l'élément est détaché ou nouveau, vous ne devriez pas avoir besoin d'appeler AddToItems – Jeff