共用方式為


適用于 .NET 的 Azure WebJobs 資料表用戶端程式庫 - 1.1.0 版

此延伸模組提供在 Azure Functions 中存取 Azure 資料表的功能。

開始使用

安裝套件

使用 NuGet安裝 Tables 擴充功能:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Tables

必要條件

您需要 Azure 訂帳戶和儲存體帳戶Cosmos 資料表帳戶 ,才能使用此套件。

使用儲存體資料表

若要建立新的儲存體帳戶,您可以使用Azure入口網站、Azure PowerShellAzure CLI。 以下是使用 Azure CLI 的範例:

az storage account create --name <your-resource-name> --resource-group <your-resource-group-name> --location westus --sku Standard_LRS

使用 Cosmos 資料表

若要建立新的 Cosmos 資料表,您可以使用Azure入口網站、Azure PowerShellAzure CLI

驗證用戶端

連線代表連線至資料表服務所需的一組資訊。 它可以包含連接字串、端點、權杖認證或共用金鑰。

ConnectionTableAttribute 屬性會定義用於資料表服務存取的連線。 例如, [Tables(Connection="MyTableService")] 將使用 MyTableService 連線。

連線資訊可以在 Azure 入口網站 中設定 local.settings.json應用程式設定

將設定新增至 local.settings.json 時,請將它放在 屬性底下 Values

{
  "IsEncrypted": false,
  "Values": {
    "MyTableService": "..."
  }
}

將設定新增至Azure 入口網站中的應用程式設定時,會直接使用提供的名稱:

MyTableService = ...

資料表延伸模組預設會 AzureWebJobsStorage 使用連接名稱。

連接字串

若要使用連接字串驗證,請將連接字串值直接指派給連線設定。

<ConnectionName> = DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net

使用端點和權杖認證

注意: 只有儲存體資料表才支援權杖認證驗證。

<ConnectionName>__endpoint = https://...table.core.windows.net

如果未提供認證資訊, DefaultAzureCredential 則會使用 。

使用使用者指派的受控識別 clientId 時,必須提供 和 credential 設定:

<ConnectionName>__credential = managedidentity

<ConnectionName>__clientId = <user-assigned client id>

使用共用金鑰認證

使用共用金鑰驗證時, endpoint 必須提供 和 accountNameaccountKey

<ConnectionName>__endpoint = https://...table.core.windows.net

<ConnectionName>__credential__accountName = <account name>

<ConnectionName>__credential__accountKey = <account key>

重要概念

輸入系結可讓您將資料表讀取為 Azure 函式的輸入。 輸出系結可讓您修改和刪除 Azure Function 中的資料表資料列。

請遵循 輸入系結教學 課程和 輸出系結教學課程 ,以瞭解使用此延伸模組來存取資料表服務。

範例

資料表延伸模組只提供系結。 系結本身無法觸發函式。 它只能讀取或寫入資料表的專案。

在下列範例中,我們使用 HTTP 觸發程式 來叫用 函式。

系結至單一實體

public class InputSingle
{
    [FunctionName("InputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] TableEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
    }
}

使用模型類型系結至單一實體

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class InputSingleModel
{
    [FunctionName("InputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", "<RowKey>")] MyEntity entity, ILogger log)
    {
        log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity.Text}");
    }
}

使用篩選系結至多個實體

public class InputMultipleEntitiesFilter
{
    [FunctionName("InputMultipleEntitiesFilter")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable", "<PartitionKey>", Filter = "Text ne ''")] IEnumerable<TableEntity> entities, ILogger log)
    {
        foreach (var entity in entities)
        {
            log.LogInformation($"PK={entity.PartitionKey}, RK={entity.RowKey}, Text={entity["Text"]}");
        }
    }
}

建立單一實體

public class OutputSingle
{
    [FunctionName("OutputSingle")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out TableEntity entity)
    {
        entity = new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = "Hello"
        };
    }
}

使用模型建立單一實體

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputSingleModel
{
    [FunctionName("OutputSingleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "GET")] HttpRequest request,
        [Table("MyTable")] out MyEntity entity)
    {
        entity = new MyEntity()
        {
            PartitionKey = "<PartitionKey>",
            RowKey = "<RowKey>",
            Text = "Hello"
        };
    }
}

建立多個實體

public class OutputMultiple
{
    [FunctionName("OutputMultiple")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<TableEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new TableEntity("<PartitionKey>", i.ToString())
            {
                ["Text"] = i.ToString()
            });
        }
    }
}

使用模型建立多個實體

public class MyEntity
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}
public class OutputMultipleModel
{
    [FunctionName("OutputMultipleModel")]
    public static void Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] IAsyncCollector<MyEntity> collector)
    {
        for (int i = 0; i < 10; i++)
        {
            collector.AddAsync(new MyEntity()
            {
                PartitionKey = "<PartitionKey>",
                RowKey = i.ToString(),
                Text = i.ToString()
            });
        }
    }
}

系結至 SDK TableClient 類型

使用 TableClient 方法參數,使用 Azure Tables SDK 來存取資料表。

public class BindTableClient
{
    [FunctionName("BindTableClient")]
    public static async Task Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "POST")] HttpRequest request,
        [Table("MyTable")] TableClient client)
    {
        await client.AddEntityAsync(new TableEntity("<PartitionKey>", "<RowKey>")
        {
            ["Text"] = request.GetEncodedPathAndQuery()
        });
    }
}

疑難排解

如需疑難排解指引,請參閱監視Azure Functions

下一步

閱讀 Azure 函式簡介建立 Azure 函式指南

參與

如需建 、測試和參與此程式庫的詳細資訊,請參閱 CONTRIBUTING.md。

此專案歡迎參與和提供建議。 大部分的參與都要求您同意「參與者授權合約 (CLA)」,宣告您有權且確實授與我們使用投稿的權利。 如需詳細資訊,請造訪 cla.microsoft.com

此專案採用 Microsoft Open Source Code of Conduct (Microsoft 開放原始碼管理辦法)。 如需詳細資訊,請參閱管理辦法常見問題集,如有任何其他問題或意見請連絡 opencode@microsoft.com

曝光數