Azure Function 中没有从 table 到 ITableEntity 的隐式引用转换

There is no implicit reference conversion from table to ITableEntity in Azure Function

我正在编写我的第一个 Azure 函数和 Azure table 代码。我在编写 Get 查询函数时遇到问题。我有以下代码会尝试从 table.

中获取所有作业
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);

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

我的 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 包:

我试图从这个 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,如我所引用的文章中所述。现在一切都按预期工作。但是,我仍然想看看如何使用更新的库。原来收到的issue,在Gaurav的建议下已经解决了,所以我暂时接受这个答案。

我相信您 运行 是因为您使用了两个不同的 SDK - Azure.Data.TablesMicrosoft.WindowsAzure.Storage.Table

您的 JobTable 实体实现了 Azure.Data.TablesITableEntity,并且您正在将其与 Microsoft.WindowsAzure.Storage.TableCloudTable 一起使用。

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