升级到新的存储API版本4.2后,我收到以下警告:我在某些分段查询上调用了过时的方法。
'Microsoft.WindowsAzure.Storage.Table.CloudTableClient.GetTableServiceContext()' 已过时:'支持通过WCF数据访问Windows Azure表 服务现已过时。建议您使用 用于处理的Microsoft.WindowsAzure.Storage.Table命名空间 表'。
到目前为止,我还没有弄清楚如何在新的API上实现这一点,并且没有找到我能够找到的例子。遗留代码仍然运行良好,但如果新API支持更好的东西,我很乐意检查它并摆脱这个警告。有人能指出我正确的方向,如何使用新的API看起来这样的分段查询?
以下是我的代码目前的警告:
public AzureTablePage<T> GetPagedResults<T>(Expression<Func<T, bool>> whereCondition, string ContinuationToken, int PageSize, string TableName) {
TableContinuationToken token = GetToken(ContinuationToken);
var query = AzureTableService.CreateQuery<T>(TableName).Where(whereCondition).Take(PageSize).AsTableServiceQuery(AzureTableClient.GetTableServiceContext());
var results = query.ExecuteSegmented(token, new TableRequestOptions() { PayloadFormat = TablePayloadFormat.JsonNoMetadata });
if (results.ContinuationToken != null) {
return new AzureTablePage<T>() { Results = results.ToList(), HasMoreResults = true, ContinuationToken = string.Join("|", results.ContinuationToken.NextPartitionKey, results.ContinuationToken.NextRowKey) };
} else {
return new AzureTablePage<T>() { Results = results.ToList(), HasMoreResults = false };
}
}
public TableServiceContext AzureTableService {
get {
var context = AzureTableClient.GetTableServiceContext();
context.IgnoreResourceNotFoundException = true;
return context;
}
}
public CloudTableClient AzureTableClient {
get {
return mStorageAccount.CreateCloudTableClient();
}
}
解决方案
对于有相同问题的任何人,这里是更新的代码。
/* Add the following Using Statement */
using Microsoft.WindowsAzure.Storage.Table.Queryable;
public AzureTablePage<T> GetPagedResults<T>(Expression<Func<T, bool>> whereCondition, string ContinuationToken, int PageSize, string TableName) where T : class, ITableEntity, new() {
TableContinuationToken token = GetToken(ContinuationToken);
var query = AzureTableClient.GetTableReference(TableName).CreateQuery<T>().Where(whereCondition).Take(PageSize).AsTableQuery();
var results = query.ExecuteSegmented(token, new TableRequestOptions() { PayloadFormat = TablePayloadFormat.JsonNoMetadata });
if (results.ContinuationToken != null) {
return new AzureTablePage<T>() { Results = results.ToList(), HasMoreResults = true, ContinuationToken = string.Join("|", results.ContinuationToken.NextPartitionKey, results.ContinuationToken.NextRowKey) };
} else {
return new AzureTablePage<T>() { Results = results.ToList(), HasMoreResults = false };
}
}
答案 0 :(得分:1)
请参阅我们在首次推出新的表格服务图层时发布的Tables Deep Dive blog post。如果您需要LINQ支持,请参阅Azure Storage Client Library 2.1 blog post。
我们强烈建议升级到表服务层,因为它针对NoSQL场景进行了优化,因此可以提供更好的性能。