【问题标题】: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>

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

要迁移的代码示例如下:

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);

【问题讨论】:

标签: c# azure .net-core nuget


【解决方案1】:

您可能应该在that blog postrelated 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 等按字面意思指定。不解释组合查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-26
  • 1970-01-01
  • 2015-08-26
  • 2011-05-02
  • 2015-02-28
  • 2011-06-23
  • 1970-01-01
相关资源
最近更新 更多