azure - Azure Function 中没有从表到 ITableEntity 的隐式引用转换

标签 azure azure-functions azure-table-storage azure-tablequery

我正在编写第一个 Azure Function 和 Azure 表代码。当我编写 Get 查询函数时遇到问题。我有以下代码,它将尝试从表中获取所有作业。

public static class GetJobStatus
{
    [FunctionName("GetJobStatus")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
        [Table("JobTable")] CloudTable jobTable,
        ILogger log)
    {
        log.LogInformation("Get job status.");

        string jobId = req.Query["jobid"];

        TableQuery<JobTable> query = new TableQuery<JobTable>();
        var segment = await jobTable.ExecuteQuerySegmentedAsync(query, null);
        var data = segment.Select(JobExtension.ToJob);

        return new OkObjectResult("");
    }
}

但是,我在这些语句上遇到编译时错误:

TableQuery<JobTable> query = new TableQuery<JobTable>();
var segment = await jobTable.ExecuteQuerySegmentedAsync(query, null);

我正在尝试粘贴悬停时出现的实际错误消息: enter image description here 并且,在 ExecuteQuerySegmentedAsync 方法中获取以下内容 enter image description here

我的JobTable继承自ITableEntity(Azure.Data.Tables):

public class JobTable : ITableEntity
{
    public string Id { get; set; }
    public DateTime CreatedTime { get; set; }
    public JobRequest Request { get; set; }

    //ITableEntity Members
    public virtual string PartitionKey { get; set; } = "Job";
    public virtual string RowKey { get => Id; set => Id = value; }
    public DateTimeOffset? Timestamp { get; set; }
    public ETag ETag { get; set; }
}

我安装了以下 nuget 软件包: enter image description here

我试图从这个article实现,但它使用较旧的 nuget 包,我遇到了麻烦。

更新#1:

根据 Gaurav Mantri 的建议,为了保持一致,我删除了 Azure.Data.Tables 并开始使用 Microsoft.WindowsAzure.Storage.Table 。这修复了编译时错误。但现在我收到以下运行时错误:

Microsoft.Azure.WebJobs.Host: Error indexing method 'GetJobStatus'. Microsoft.Azure.WebJobs.Extensions.Tables: Can't bind Table to type 'Microsoft.WindowsAzure.Storage.Table.CloudTable'.

更新#2:

我无法使其工作,因此我将所有代码和引用恢复为使用 Microsoft.Azure.Cosmos.Table,如我引用的文章中所述。现在一切都按预期进行。但是,我仍然想看看如何使用较新的库。对于收到的原始问题,Gaurav 的建议已经解决了,所以我现在会接受答案。

最佳答案

我相信您遇到此问题是因为您使用了两种不同的 SDK - Azure.Data.TablesMicrosoft.WindowsAzure.Storage.Table

您的 JobTable 实体从 Azure.Data.Tables 实现 ITableEntity,并且您将其与您的 CloudTable 一起使用来自Microsoft.WindowsAzure.Storage.Table

您可以尝试删除 Azure.Data.Tables 包并仅使用 Microsoft.WindowsAzure.Storage.Table 吗?

关于azure - Azure Function 中没有从表到 ITableEntity 的隐式引用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71342813/

相关文章:

Azure负载均衡器将请求转发到虚拟机

azure - 如何从 Azure 中不同目录中的订阅移动资源

azure - 为什么 .NET 6 上的 Azure Function 寻找 System.ComponentModel 版本 6.0.0.0?

azure - 无法在 Visual Studio 2017 中加载迁移的 Azure 函数项目

azure - Windows Azure 表 : C# API for Update/Merge?

Azure 端点协议(protocol)差异

azure - 云中自定义客户端服务器应用程序的负载平衡

azure - Azure Functions 应用程序的项目级别文化设置

c# - ServiceContext.SaveChangesWithRetries 与 SaveChangesOptions.Batch 异常

azure - 将字符串字段转换为 Azure 表存储中的日期时间字段