C# SL3/SL4-新建DataServiceCollection期间Ado.Net数据服务出错(queryResponse)
嘿,大家好,我在一个SL项目VS2010中有两个函数,它们做几乎完全相同的事情,但是一个抛出错误,另一个没有。这似乎与预测有关,但我不确定解决问题的最佳方法 工作的功能是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
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
);
}
谢谢你调查。。。遗憾的是,没有,在同一点上仍然是相同的例外。我感谢你们调查,请告诉我你们发现了什么!