C# SL3/SL4-新建DataServiceCollection期间Ado.Net数据服务出错(queryResponse)

C# SL3/SL4-新建DataServiceCollection期间Ado.Net数据服务出错(queryResponse),c#,silverlight,silverlight-4.0,silverlight-3.0,wcf-data-services,C#,Silverlight,Silverlight 4.0,Silverlight 3.0,Wcf Data Services,嘿,大家好,我在一个SL项目VS2010中有两个函数,它们做几乎完全相同的事情,但是一个抛出错误,另一个没有。这似乎与预测有关,但我不确定解决问题的最佳方法 工作的功能是 public void LoadAllChunksExpandAll(DataHelperReturnHandler handler, string orderby) { DataServiceCollection<CmsChunk> data = null; DataSe

嘿,大家好,我在一个SL项目VS2010中有两个函数,它们做几乎完全相同的事情,但是一个抛出错误,另一个没有。这似乎与预测有关,但我不确定解决问题的最佳方法

工作的功能是

public void LoadAllChunksExpandAll(DataHelperReturnHandler handler, string orderby)
    {
        DataServiceCollection<CmsChunk> data = null;

        DataServiceQuery<CmsChunk> theQuery = _dataservice
            .CmsChunks
            .Expand("CmsItemState")
            .AddQueryOption("$orderby", orderby);

        theQuery.BeginExecute(
            delegate(IAsyncResult asyncResult)
            {
                _callback_dispatcher.BeginInvoke(
                        () =>
                        {
                            try
                            {
                                DataServiceQuery<CmsChunk> query = asyncResult.AsyncState as DataServiceQuery<CmsChunk>;
                                if (query != null)
                                {
                                    //create a tracked DataServiceCollection from the result of the asynchronous query.
                                    QueryOperationResponse<CmsChunk> queryResponse =
                                        query.EndExecute(asyncResult) as QueryOperationResponse<CmsChunk>;
                                    data = new DataServiceCollection<CmsChunk>(queryResponse);

                                    handler(data);
                                }
                            }
                            catch
                            {
                                handler(data);
                            }
                        }
                    );
            },
            theQuery
        );
    }
这将按预期编译和运行。下面显示的一个非常非常类似的函数失败了

             public void LoadAllPagesExpandAll(DataHelperReturnHandler handler, string orderby)
    {
        DataServiceCollection<CmsPage> data = null;

        DataServiceQuery<CmsPage> theQuery = _dataservice
            .CmsPages
            .Expand("CmsChildPages")
            .Expand("CmsParentPage")
            .Expand("CmsItemState")
            .AddQueryOption("$orderby", orderby);

        theQuery.BeginExecute(
            delegate(IAsyncResult asyncResult)
            {
                _callback_dispatcher.BeginInvoke(
                        () =>
                        {
                            try
                            {
                                DataServiceQuery<CmsPage> query = asyncResult.AsyncState as DataServiceQuery<CmsPage>;
                                if (query != null)
                                {
                                    //create a tracked DataServiceCollection from the result of the asynchronous query.
                                    QueryOperationResponse<CmsPage> queryResponse = query.EndExecute(asyncResult) as QueryOperationResponse<CmsPage>;
                                    data = new DataServiceCollection<CmsPage>(queryResponse);

                                    handler(data);
                                }
                            }
                            catch
                            {
                                handler(data);
                            }
                        }
                    );
            },
            theQuery
        );
    }
显然,问题在于涉及自引用关系的扩展投影页面可以包含其他页面。这在SL4或SL3下使用ADONETDataServices SL3更新CTP3

我愿意接受任何关于谷歌信息的工作或指向谷歌信息的指示,谷歌搜索错误结果会有两次点击,这两次点击都不会对我有特别的帮助

短错误是无法将项目添加到集合中。当DataServiceContext跟踪DataServiceCollection中的项时,在将项加载到集合中之前,无法添加新项

完全错误是

System.Reflection.TargetInputException异常 已捕获消息=异常已被捕获 被敌人的目标扔了出去 调用。堆栈跟踪: 在System.RuntimeMethodHandle.\u InvokeMethodFastIRuntimeMethodInfo 方法、对象目标、对象[] 参数、签名和签名, MethodAttributes方法属性, RuntimeType类型所有者 位于System.Reflection.RuntimeMethodInfo.InvokeObject obj,BindingFlags调用EATTR,活页夹 活页夹,对象[]参数, CultureInfo区域性,布尔值 skipVisibilityChecks 位于System.Reflection.RuntimeMethodInfo.InvokeObject obj,BindingFlags调用EATTR,活页夹 活页夹,对象[]参数, 文化信息文化 位于System.Reflection.MethodBase.InvokeObject 对象[]参数 位于System.Data.Services.Client.ClientType.ClientProperty.SetValueObject 实例、对象值、字符串 propertyName,布尔allowad 位于System.Data.Services.Client.AtomMaterializer.ApplyItemsToCollectionToEntry 条目,ClientProperty属性, IEnumerable items,Uri nextLink, 项目计划延续计划 位于System.Data.Services.Client.AtomMaterializer.ApplyFeedToCollectionAtory 条目,ClientProperty属性, AtomFeed提要,布尔includeLinks 位于System.Data.Services.Client.AtomMaterializer.MaterialeSolvedentryAtomentry 条目,布尔includeLinks 在System.Data.Services.Client.AtomMaterializer.MaterialEaToMentry 条目,类型expectedEntryType,布尔值 包括脱钩 位于System.Data.Services.Client.AtomMaterializer.DirectMaterialPlanatomMaterializer 物化器,原子条目,类型 预期类型 位于System.Data.Services.Client.AtomMaterializerInvoker.DirectMaterialPlanObject 物化器、对象条目、类型 预期类型 位于System.Data.Services.Client.ProjectionPlan.RunAtomMaterializer 物化器,原子条目,类型 预期类型 位于System.Data.Services.Client.AtomMaterializer.Read 位于System.Data.Services.Client.MaterializeAtom.MoveNextInternal 位于System.Data.Services.Client.MaterializeAtom.MoveNext 在System.Linq.Enumerable.d_ub11.MoveNext 位于System.Data.Services.Client.DataServiceCollection1.InternalLoadCollectionIEnumerable1项 位于System.Data.Services.Client.DataServiceCollection1.StartTrackingDataServiceContext 上下文,IEnumerable1项,字符串 entitySet,Func2 entityChanged, 功能2集合已更改 位于System.Data.Services.Client.DataServiceCollection1..ctorDataServiceContext 上下文,IEnumerable1项, 跟踪模式跟踪模式,字符串 entitySetName,Func2 entityChangedCallback,Func2 collectionChangedCallback 位于System.Data.Services.Client.DataServiceCollection1..ctorIEnumerable1 项目 在Phinli.Dashboard.Silverlight.Helpers.DataHelper.c__显示类44.c__显示类46.b__43 内部异常: System.InvalidOperationException异常 Message=无法将项目添加到集合中。当项目在 DataServiceCollection由跟踪 DataServiceContext,新项目 在添加项目之前无法添加 加载到集合中。 堆栈跟踪: 位于System.Data.Services.Client.DataServiceCollection1.InsertItemInt32 索引,T项 位于System.Collections.ObjectModel.Collection`1.AddT 项目 内部异常:


谢谢你的帮助

这听起来有点像数据服务中的bug

我将与数据服务团队跟进,并给您答复

由于周末的原因,可能需要几天时间


Data Services PM

我认为这里的问题是DataServiceCollection无法将下载的实体添加到顶级CMSPage类型的相应DataServiceCollection属性中。我们使用了一些特殊的大小写来确保 taServiceCollection只能在其开始跟踪某些对象后才能使用。稍后我将对此进行调查,同时尝试以下代码:

public void LoadAllPagesExpandAll(DataHelperReturnHandler handler, string orderby) 
{ 
  DataServiceCollection<CmsPage> data = new   DataServiceCollection<CmsPage>( _dataservice );

  DataServiceQuery<CmsPage> theQuery = _dataservice 
      .CmsPages 
      .Expand("CmsChildPages") 
      .Expand("CmsParentPage") 
      .Expand("CmsItemState") 
      .AddQueryOption("$orderby", orderby); 

  theQuery.BeginExecute( 
      delegate(IAsyncResult asyncResult) 
      { 
    _callback_dispatcher.BeginInvoke( 
      () => 
      { 
          try 
          { 
        DataServiceQuery<CmsPage> query = asyncResult.AsyncState as DataServiceQuery<CmsPage>; 
        if (query != null) 
        { 
            //create a tracked DataServiceCollection from the result of the asynchronous query. 
            QueryOperationResponse<CmsPage> queryResponse = query.EndExecute(asyncResult) as QueryOperationResponse<CmsPage>; 
            data.Load(queryResponse); 

            handler(data); 
        } 
          } 
          catch 
          { 
        handler(data); 
          } 
      } 
        ); 
      }, 
      theQuery 
  ); 
} 

谢谢你调查。。。遗憾的是,没有,在同一点上仍然是相同的例外。我感谢你们调查,请告诉我你们发现了什么!