【问题标题】:Retrieve records from Azure Table Storage is throwing Object Reference not set从 Azure 表存储中检索记录抛出未设置对象引用
【发布时间】:2020-06-26 04:43:58
【问题描述】:

我有非常简单的代码来从表存储中检索所有项目。下面的代码因对象引用未设置异常而失败

    public async Task<List<StringInternTableEntity>> GetAllRowsAsync()
    {
        var entities = new List<StringInternTableEntity>();

        try
        {
            TableContinuationToken token = null;
            do
            {
                var queryResult = await this.azureCloudTable.ExecuteQuerySegmentedAsync(new TableQuery<StringInternTableEntity>(), token);
                entities.AddRange(queryResult.Results);
                token = queryResult.ContinuationToken;
            } while (token != null);

        }
        catch (Exception ex)
        {
            return null;
        }

        return entities;
    }

public class StringInternTableEntity : TableEntity
{
    public StringInternTableEntity()
    {
    }

    public StringInternTableEntity(string runStartTimeStamp, string wordKey)
    {
        PartitionKey = runStartTimeStamp;
        RowKey = wordKey;
    }

    public int NumberValue { get; set; }
}

" 在 Microsoft.Azure.Cosmos.Table.Extensions.TableExtensionExecutor。c__DisplayClass24_02.&lt;&lt;ExecuteQuerySegmentedInternalAsync&gt;b__0&gt;d.MoveNext()\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at Microsoft.Azure.Cosmos.Table.Extensions.TableExtensionRetryPolicy.&lt;ExecuteUnderRetryPolicy&gt;d__21.MoveNext()\r\n 在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n 在 System .Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n 在 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n 在 Citadel.Common.Utils.AzureCloudTableHelper.d__9.MoveNext() :\Users\kalsa\source\repos\Citadel3\Citadel.Common\Utils\AzureCloudTableHelper.cs:line 166"

另外,在我的表中,我有 1 个简单的条目。

【问题讨论】:

  • 你能发布你的StringInternTableEntity 模型吗?
  • @TấnNguyên - 已更新。
  • 快速浏览一下,我认为new TableQuery&lt;StringInternTableEntity&gt;() 会导致问题,因为它一直在创建新实例。尝试将其移出循环。
  • 不。同样的问题。我也尝试了下面提到的代码,同样的错误。
  • 那么你可能会在azureCloudTable附近设置断点,它可能在某个地方出错,因为下面的代码对我有用。

标签: c# azure azure-cosmosdb


【解决方案1】:

你可以试试下面的代码,我修改了检索数据的逻辑并最终将其存储到列表中

 public async Task<List<StringInternTableEntity>> GetAllRowsAsync()
        {
             var query = this.azureCloudTable.CreateQuery<StringInternTableEntity>();
                var result = new List<StringInternTableEntity>();
                var token = new TableContinuationToken();
                do
                {
                    var segment = await this.azureCloudTable.ExecuteQuerySegmentedAsync(query, token);
                    token = segment.ContinuationToken;
                    result.AddRange(segment);
                } while (token != null);
                List<StringInternTableEntity> lstClientID = new List<StringInternTableEntity>();
                foreach (StringInternTableEntity codeMapping in result)
                {
                    lstClientID.Add(codeMapping);
                }
                return lstClientID;
        }

【讨论】:

  • @MickyD 我已经添加了对我在回答中所做的事情的描述。如果您因此而投反对票,请投赞成票
  • 感谢更新。不是我投了反对票,但这里是一样的赞成票。 版主:请忽略标记
  • @RaghvenderKataria - 没有运气。唯一不同的是,你可以看到我的屏幕截图,我有基于时间戳的分区键,而行键是实际的键。
猜你喜欢
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多