Службы данных Silverlight + WCF получают InvalidOperationException: контекст уже отслеживает другую сущность с тем же ресурсом Uri - PullRequest
0 голосов
/ 14 декабря 2010

Я пытаюсь заменить объект новым и получаю упомянутое исключение. Я пробовал несколько комбинаций и не могу обойтись.

У меня есть плейлист, в котором есть Предметы (у Предметов есть другой вложенный объект, но я опускаю его, чтобы сделать мой вопрос более понятным. Пользователь может изменить, какие предметы находятся в плейлисте.

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

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ: я переопределил Equals и ToString в частичном классе плейлиста. После того, как я удалил их, он начал работать.

Ответы [ 2 ]

1 голос
/ 15 декабря 2010

Я переопределил Equals и ToString в частичных классах Playlist в Silverlight.После того как я удалил их, он начал работать.Я собираюсь избегать этого с помощью WCF Data Services.

0 голосов
/ 14 декабря 2010

Если вы извлекли данные, используя контекст, отличный от того, который вы пытаетесь добавить / удалить, вы получите опубликованное исключение.Либо избавьтесь от исходного контекста, из которого вы извлекли данные, либо явно вызовите Detach для элемента, для которого вы вызываете AddItem / DeleteObject.

...