Azure表存储警告 - WCF数据服务已过时

时间:2014-08-27 16:14:23

标签: azure azure-storage azure-table-storage

升级到新的存储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 };
    }
}

1 个答案:

答案 0 :(得分:1)

请参阅我们在首次推出新的表格服务图层时发布的Tables Deep Dive blog post。如果您需要LINQ支持,请参阅Azure Storage Client Library 2.1 blog post

我们强烈建议升级到表服务层,因为它针对NoSQL场景进行了优化,因此可以提供更好的性能。

相关问题