从“WindowsAzure.Storage”迁移时,我应该为 Azure 表使用啥包

Posted

技术标签:

【中文标题】从“WindowsAzure.Storage”迁移时,我应该为 Azure 表使用啥包【英文标题】:What package should I use for Azure Tables when migrating away from "WindowsAzure.Storage"从“WindowsAzure.Storage”迁移时,我应该为 Azure 表使用什么包 【发布时间】:2021-10-01 07:59:19 【问题描述】:

我目前正在将使用 ASP.NET WebApi 为 .NET Fx 4.8 编写的项目迁移到 .NET 5.0。该项目大量使用包 WindowsAzure.Storage 来访问 Azure 存储帐户上的 BLOB、表和队列。这个包已经被弃用了一段时间,说明它已经被分成了几个包。

对于队列和 Blob,我应该迁移到什么位置非常清楚。但是,关于 Azure Tables 似乎有很多困惑。

首先在 NuGet 包WindowsAzure.Storage 中声明用于表的包是Microsoft.Azure.CosmosDB.Table。这有点令人困惑,因为我一直认为“CosmosDB”与“Azure Tables”完全不同,但也许我错了。 Microsoft.Azure.CosmosDB.Table 的描述表明此软件包处于维护模式,将被弃用。我应该改用Microsoft.Azure.Cosmos.Table。 Microsoft.Azure.Cosmos.Table 但是很久没有更新了,2.0.0 已经预览了两年多了。它的 GitHub 存储库上还有一个问题,专门询问该项目是否已死 - 没有答案。 四处搜索后,我发现包Azure.Data.Tables 与我可能正在寻找的最接近。它已更新,看起来很活跃,并且似乎与其他存储包一致(版本号)。只是命名有点偏离。今年 6 月,MS 还发表了一篇博文,说这个包是全新的,所以我想这就是我要找的吗?

无论如何:我发现 Azure.Data.Tables 的 API 与 WindowsAzure.Storage 非常相似,我只需要在这里和那里进行一些调整。 p>

但我现在完全缺少的是 QueryComparisons 和 TableQuery 类。他们刚刚走了吗?有替代品吗?

要迁移的代码示例如下:

var part1 = 
  TableQuery.GenerateFilterConditionForGuid(
    nameof(SomeEntity.Id),
    QueryComparisons.Equal,
    idValue));
var part2 = 
  TableQuery.GenerateFilterConditionForGuid(
    nameof(SomeEntity.Category)
    QueryComparisons.Equal,
    category));
return TableQuery.CombineFilters(part1, TableOperators.And, part2);

【问题讨论】:

请编辑您的问题并包含您当前拥有的想要迁移的代码。 请注意 Cosmos.Table 已于 2020 年更新,最新版本为 1.0.8。这个 1.0.8 有你的课程。不过,预览版已于 2019 年更新。 nuget.org/packages/Microsoft.Azure.Cosmos.Table/1.0.8 你有没有深究过这个? 我最终使用了 [Azure.Data.Tables] (nuget.org/packages/Azure.Data.Tables) 【参考方案1】:

您可能应该在that blog post 和related docs 中进一步阅读:

查询表实体

TableClient 允许用户使用 OData 过滤器创建自定义查询。

string MyPK = "markers";
string MyRK = "id-001";
string filter = TableOdataFilter.Create($"PartitionKey eq MyPK or RowKey eq MyRK")

Pageable<TableEntity> entities = tableClient.Query<TableEntity>(filter: filter);

foreach (TableEntity entity in entities)

    Console.WriteLine($"entity.GetString("Product"): entity.GetInteger("Count")");

【讨论】:

TableOdataFilter 现在是一个内部类,因此不可用,因此请谨慎阅读帖子的内容。它也不完全是替代品:eqorand 等按字面意思指定。不解释组合查询。

以上是关于从“WindowsAzure.Storage”迁移时,我应该为 Azure 表使用啥包的主要内容,如果未能解决你的问题,请参考以下文章

如何用 Microsoft.Azure.Storage.Blob 替换 Microsoft.WindowsAzure.Storage

Microsoft.WindowsAzure.Storage (WindowsAzure.Storage) 9.1.1 在其依赖之外调用 Newtonsoft 失败

Microsoft.WindowsAzure.Storage 与 Microsoft.WindowsAzure.StorageClient

Microsoft.Azure.Storage 和 WindowsAzure.Storage Nuget 包有啥区别?

创建可以处理多个队列的 Azure.Storage.Queues 客户端

Microsoft.WindowsAzure.Storage:找不到有效的帐户信息组合