我正在迁移到对我的 Azure 表存储使用新的存储客户端库。
使用之前的Storage Client Library 1.7命名空间进行查询:
var orders = serviceContext
.CreateQuery<Order>(tableName)
.AsTableServiceQuery<Order>()
.Where(e => e.PartitionKey == partitionKey && e.RowKey == rowKey)
使用新的Storage Client Library 2.0类进行查询:
string partitionKeyFilter = TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey);
string rowKeyFilter = TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, rowKey);
string combinedFilter = TableQuery.CombineFilters(partitionKeyFilter, TableOperators.And, rowKeyFilter);
var query = new TableQuery<Order>().Where(combinedFilter);
var orders = table.ExecuteQuery<Order>(query);
如果我错了,请纠正我,但 1.7 更干净,使用强类型实体,实现 IQueryable 接口(interface)并利用 LINQ 的全部功能。 2.0 版让我感觉自己又在使用 ADO.NET 数据集了。
我完全错过了这里的情节吗?我知道性能有了重大改进,但为什么 2.0 版本感觉像是 API 的降级?
最佳答案
存储客户端库 2.0 仍然包含不同命名空间中的旧版 DataServices 实现。另一方面,与更新的 DataServices 实现和 SDK 的早期版本相比,新的表实现显示出显着的性能改进。根据操作的不同,延迟改善了 25% 到 75%,同时系统资源利用率也显着降低。
请引用Windows Azure Storage Client Library 2.0 Tables Deep Dive博客文章以获取更多信息。正如博文中还提到的,如果您更喜欢 LINQ,您仍然可以使用已迁移到 Microsoft.WindowsAzure.Storage.Table.DataServices 命名空间的旧版 DataServices 实现。
新表服务层中的 IQueryable 支持目前正在开发中。目前我们没有任何更具体的时间表细节可以分享。
关于c# - 存储客户端库 2.0 - 为什么 API 使用起来不如 1.7 那么直观?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15097902/