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.Tables
和 Microsoft.WindowsAzure.Storage.Table
。
您的 JobTable
实体实现了 Azure.Data.Tables
的 ITableEntity
,并且您正在将其与 Microsoft.WindowsAzure.Storage.Table
的 CloudTable
一起使用。
您可以尝试删除 Azure.Data.Tables
包并只使用 Microsoft.WindowsAzure.Storage.Table
吗?
我正在编写我的第一个 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.Tables
和 Microsoft.WindowsAzure.Storage.Table
。
您的 JobTable
实体实现了 Azure.Data.Tables
的 ITableEntity
,并且您正在将其与 Microsoft.WindowsAzure.Storage.Table
的 CloudTable
一起使用。
您可以尝试删除 Azure.Data.Tables
包并只使用 Microsoft.WindowsAzure.Storage.Table
吗?