我正在尝试使用azure函数从Azure存储表中检索特定的列数据。我正在使用table.ExecuteAsync(TableOperation.Retrieve())方法,但我不知道我正在做的是对的。
static async Task<TableResult> GetAllMessages(CloudTable table, String InvocationName)
{
TableResult x = await table.ExecuteAsync(TableOperation.Retrieve(InvocationName,"1" ));
return x;
}
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route =null)] HttpRequest req,ILogger log)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("models");
var x = await GetAllMessages(table, "InvocationName");
}
Azure Function支持Azure Table绑定。您可以使用它来读取或插入表。你可以从这里得到细节:Azure Table storage bindings for Azure Functions。
如果你想读取多个表行,你需要使用IQueryable
,这里是官方文档中的example。
public class TableStorage
{
public class MyPoco : TableEntity
{
public string Text { get; set; }
}
[FunctionName("TableInput")]
public static void TableInput(
[QueueTrigger("table-items")] string input,
[Table("MyTable", "MyPartition")] IQueryable<MyPoco> pocos,
ILogger log)
{
foreach (MyPoco poco in pocos)
{
log.LogInformation($"PK={poco.PartitionKey}, RK={poco.RowKey}, Text={poco.Text}");
}
}
}
所以事实证明我需要创建一个扩展TableEntity并在该类中包含我的表列的类
class model : TableEntity{
public string Name { get; set; }
public override string ToString(){
return " " + Name;
}
}
static async Task<TableResult> GetAllMessages(CloudTable table, String InvocationName)
{
TableResult x = await table.ExecuteAsync(TableOperation.Retrieve(InvocationName,"1" ));
return x;
}
public static async Task<IActionResult> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route =null)] HttpRequest req,ILogger log)
{
CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();
CloudTable table = tableClient.GetTableReference("models");
var x = await GetAllMessages(table, "InvocationName");
string url = ((model)x.Result).ToString();
}