Azure Table 存储:使用现有属性作为 PartitionKey 和 RowKey

Azure Table Storage: Use existing properties as PartitionKey and RowKey

我有一个模型,其中现有字段已经非常适合 RowKey 和 PartitionKey,但我不知道如何分配它们并且没有重复数据。考虑这个例子:

public class ClassA : ITableEntity
{
    // My existing fields
    public string Id { get; set; }
    public string Receiver { get; set; }
    public DateTimeOffset? Received { get; set; }

    // ITableEntity fields
    public string PartitionKey { get => Receiver; set => Receiver = value; }
    public string RowKey { get => Id; set => Id = value; }
    public DateTimeOffset? Timestamp { get => Received; set => Received = value; }
    public ETag ETag { get; set; }
}

这行得通,但我们得到了预期的重复数据。然后我尝试将 [IgnoreDataMember] 添加到 Id、Receiver 和 Received 但后来我无法使用 TableClient.QueryAsync(x => x.Id == "...").

进行查询

有没有一种方法可以将 ITableEntity 映射到我现有的字段,以便我:

  1. 避免重复数据
  2. 可以使用我现有的字段进行查询

我正在使用 Azure.Data.Tables 版本 12.4.0

对于 Table 存储,无法将任何属性指定为 PartitionKey 和 RowKey 属性。属性必须命名为 PartitionKey 和 RowKey。

您可以在任何现有字段上查询,但查询将不会像在 PartitionKey/RowKey 字段上查询一样对待,并且会导致完整的 table 扫描。