適用于 .NET 的 Azure WebJobs 資料表用戶端程式庫 - 1.1.0 版
此延伸模組提供在 Azure Functions 中存取 Azure 資料表的功能。
開始使用
安裝套件
使用 NuGet安裝 Tables 擴充功能:
dotnet add package Microsoft.Azure.WebJobs.Extensions.Tables
必要條件
您需要 Azure 訂 用 帳戶和儲存體帳戶 或 Cosmos 資料表帳戶 ,才能使用此套件。
使用儲存體資料表
若要建立新的儲存體帳戶,您可以使用Azure入口網站、Azure PowerShell或Azure 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 PowerShell或Azure CLI。
驗證用戶端
連線代表連線至資料表服務所需的一組資訊。 它可以包含連接字串、端點、權杖認證或共用金鑰。
的 Connection
TableAttribute
屬性會定義用於資料表服務存取的連線。 例如, [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
必須提供 和 accountName
accountKey
。
<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。