Silverlight + WCF数据服务获取InvalidOperationException:上下文已经跟踪具有相同资源Uri的不同实体

时间:2010-12-14 19:52:36

标签: silverlight-4.0 wcf wcf-client

我正在尝试用新的对象替换一个对象并且我得到了提到的异常。我已经尝试了几种组合,无法绕过它。

我有一个包含项目的播放列表(这些项目有另一个嵌套对象,但我将其留下来以帮助我更清楚地解决问题。用户可以更改播放列表中的项目。

 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 个答案:

答案 0 :(得分:1)

我在Silverlight中重写了播放列表部分类中的Equals和ToString。我删除它后,它开始工作。从现在开始,我将避免使用WCF数据服务。

答案 1 :(得分:0)

如果您使用与您尝试添加/删除的上下文不同的上下文获取数据,则会收到您发布的异常。处理您获取数据的原始上下文,或者在您调用AddItem / DeleteObject的项目上显式调用Detach。