dou*_*lps 10 c# azure mscorlib
以下异常是什么意思?
System.NotSupportedException了未处理的消息:"System.NotSupportedException"类型的未处理的异常出现在mscorlib.dll其他信息:流利方法可能不经由CloudTable.CreateQuery创建的查询被调用()
它没有显示抛出异常的代码,因此我不知道如何开始调试它.
结果堆栈跟踪:在System.Web.Http.ApiController.d__1.MoveNext()---内部异常堆栈跟踪的末尾在System.Threading.Tasks.Task.ThrowIfExceptional(布尔includeTaskCanceledExceptions)在System.Threading.Tasks.任务
1.GetResultCore(Boolean waitCompletionNotification) at System.Threading.Tasks.Task1.get_Result()在TestFramework.ExecuteRequest(HttpRequestMessage请求)在d:\在TestFramework.Post在d(字符串URI,对象tniObject):\在TestFramework.PostCall(字符串URI,对象o)在d:\在TestFramework dM中的.MyMethod(字符串一,字符串二,MyStruct三)(删除隐私)
我相信问题出在以下说明中.
string queryString = TableQuery.CombineFilters(TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, myId),
TableOperators.And,
TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, number));
var theQuery = MyTable.CreateQuery<MyEntity>().Where(queryString);
Run Code Online (Sandbox Code Playgroud)
我可以使用theQuery然后执行分段异步查询吗?
var returnList = new List<T>();
TableQuerySegment<T> querySegment = null;
querySegment = await theQuery.AsTableQuery().ExecuteSegmentedAsync(null);
// The query could potentially return more than one object
returnList.AddRange(querySegment);
Run Code Online (Sandbox Code Playgroud)
好吧,将CreateQuery方法调用更改为以下代码使得异常消失.
var query = new TableQuery<TenantTNEntity>().Where(queryString);
Run Code Online (Sandbox Code Playgroud)
我现在得到的例外是:
结果消息:测试方法MyMethod抛出异常:
System.AggregateException:发生一个或多个错误.---> System.InvalidOperationException:未知表.TableQuery没有关联的CloudTable参考.请通过CloudTable ExecuteQuery API执行查询.
Ken*_*ith 21
我不知道这是否特别是你的问题,但它肯定是我的,我花了一段时间才弄明白.由于我不太清楚的原因,Azure团队提供了两种不同且不兼容的方法来执行查询 - 虽然它们在运行时不兼容,但Azure团队帮助(不!)确保它们具有兼容的签名在编译时.
查看此处描述的"Fluent"和"IQueryable"模式之间的区别:
换句话说,这两个都将编译和运行并且或多或少地做同样的事情:
var fluentQuery = new TableQuery<T>().Where(filter);
var fluentResult = Table.ExecuteQuery(fluentQuery);
var iQueryableQuery= from ent in Table.CreateQuery<T>()
where ent.PartitionKey == "some value"
select ent;
var iQueryableResult = iQueryableQuery.AsTableQuery().Execute();
Run Code Online (Sandbox Code Playgroud)
但是虽然这个编译得很好,但它会在System.NotSupportedException你(和我)碰到的时候在运行时爆炸.
var fluentQuery2 = Table.CreateQuery<T>().Where(filter);
var fluentResult2 = fluentQuery2.Execute();
Run Code Online (Sandbox Code Playgroud)
我确信MS的人有充分的理由对这种特别违反最小惊讶原则的行为- 他们不是白痴 - 但我们说,这种行为当然是不寻常的.
| 归档时间: |
|
| 查看次数: |
3190 次 |
| 最近记录: |