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 映射到我现有的字段,以便我:
- 避免重复数据
- 可以使用我现有的字段进行查询
我正在使用 Azure.Data.Tables 版本 12.4.0
对于 Table 存储,无法将任何属性指定为 PartitionKey 和 RowKey 属性。属性必须命名为 PartitionKey 和 RowKey。
您可以在任何现有字段上查询,但查询将不会像在 PartitionKey/RowKey 字段上查询一样对待,并且会导致完整的 table 扫描。
我有一个模型,其中现有字段已经非常适合 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 映射到我现有的字段,以便我:
- 避免重复数据
- 可以使用我现有的字段进行查询
我正在使用 Azure.Data.Tables 版本 12.4.0
对于 Table 存储,无法将任何属性指定为 PartitionKey 和 RowKey 属性。属性必须命名为 PartitionKey 和 RowKey。
您可以在任何现有字段上查询,但查询将不会像在 PartitionKey/RowKey 字段上查询一样对待,并且会导致完整的 table 扫描。