AlignedDev
AlignedDev

Reputation: 8232

Silverlight + WCF Data Services getting InvalidOperationException :The context is already tracking a different entity with the same resource Uri

I'm trying to replace an object with a new one and am getting the mentioned exception. I've tried several combination and can't get around it.

I have a Playlist that has Items (the Items has another nested object, but I'm leaving it out to help make my question clearer. The user can change which items are in the playlist.

 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);   
}

Any help is appreciated.

EDIT: I was overriding the Equals and ToString in Playlist partial class. After I removed those, it started working.

Upvotes: 0

Views: 969

Answers (2)

AlignedDev
AlignedDev

Reputation: 8232

I was overriding the Equals and ToString in Playlist partial classes in Silverlight. After I removed those, it started working. I'm going to avoid that from now on with WCF Data Services.

Upvotes: 1

Jeff
Jeff

Reputation: 36553

If you fetched the data using a different context from the one you are trying to add/delete with, you will get the exception you posted. Either dispose of the original context you fetched the data with or explicitly call Detach on the item you are calling AddItem/DeleteObject on.

Upvotes: 0

Related Questions