使用 .NET 在 Azure Cosmos DB for Table 中创建项

适用对象:

Azure Cosmos DB 中的项表示存储在表中的特定实体。 在 API for Table 中,项由一组键值对组成,这些键值对由行键和分区键的组合唯一标识。

为项创建唯一标识符

唯一标识符(在编程上称为 ****)是一个非重复的字符串,用于标识表中的项。 每个项还包括一个分区键值,该值用于确定项的逻辑分区。 在表中创建新项时,需要这两个键。

在一个表的范围内,两个项不能共享相同的行键和分区键。

创建项

TableEntity 类是字典的通用实现,其独特的设计使你可以轻松地从任意键值对字典创建新项。

使用以下策略之一,对要在表中创建的项建模:

使用内置类

TableEntity 类的 (string rowKey, string partitionKey) 构造函数是一种快速创建仅具有所需属性的项的方法。 然后,你可以使用 Add 方法向项中添加额外的键值对。

例如,可以通过首先在构造函数中指定行键和分区键,然后向字典中添加新的键值对来创建 TableEntity 类的新实例:

// Create new item using composite key constructor
TableEntity item1 = new(
    rowKey: "68719518388",
    partitionKey: "gear-surf-surfboards"
);

// Add properties to item
item1.Add("Name", "Sunnox Surfboard");
item1.Add("Quantity", 8);
item1.Add("Sale", true);

// Add new item to server-side table
await tableClient.AddEntityAsync<TableEntity>(item1);

TableEntity 类的 (IDictionary<string, object>) 构造函数将现有字典转换为可供添加到表中的项。

例如,可以将字典传递给 TableEntity 类的新实例:

// Create dictionary
Dictionary<string, object> properties = new()
{
    { "RowKey", "68719518388" },
    { "PartitionKey", "gear-surf-surfboards" },
    { "Name", "Sunnox Surfboard" },
    { "Quantity", 8 },
    { "Sale", true }
};

// Create new item using dictionary constructor
TableEntity item2 = new(
    values: properties
);

// Add new item to server-side table
await tableClient.AddEntityAsync<TableEntity>(item2);

TableClient.AddEntityAsync<> 方法接受 TableEntity 类型的参数,然后在表中创建服务器端项。

实现接口

注意

本节中的示例假定你已定义一个 C# 类型来表示名为 Product 的数据:

// C# record type for items in the table
public record Product : ITableEntity
{
    public string RowKey { get; set; } = default!;

    public string PartitionKey { get; set; } = default!;

    public string Name { get; init; } = default!;

    public int Quantity { get; init; }

    public bool Sale { get; init; }

    public ETag ETag { get; set; } = default!;
    
    public DateTimeOffset? Timestamp { get; set; } = default!;
}

TableClient.AddEntityAsync<> 方法接受用于实现 ITableEntity 接口的任何类型的参数。 该接口已包含必需的 RowKeyPartitionKey 属性。

例如,可以创建一个新对象,该对象至少实现 ITableEntity 接口中的所有必需属性:

// Create new item
Product item = new()
{
    RowKey = "68719518388",
    PartitionKey = "gear-surf-surfboards",
    Name = "Sunnox Surfboard",
    Quantity = 8,
    Sale = true
};

然后,可以将此对象传递给用于创建服务器端项的 AddEntityAsync<> 方法:

// Add new item to server-side table
await tableClient.AddEntityAsync<Product>(item);

后续步骤

现在你已创建各种项,请使用下一个指南读取项。