DynamicTableEntity类的相关性是什么?

6

  • TableEntityDynamicTableEntity之间有什么区别?

  • 我读了文章,但仍然不理解它们的相关性:Azure.Data.Tables v12在Azure.Data.Tables下没有DynamicTableEntity类。

  • 是否有任何等效的类可用于迁移?


请注意,Microsoft.Azure.Cosmos.Table 库已被弃用:https://www.nuget.org/packages/Microsoft.Azure.Cosmos.Table/2.0.0-preview - threadster
如果我们能看到您的项目目前如何使用“DynamicTableEntity”的示例,那么我们可以为您提供迁移步骤建议。 - Dai
2个回答

1
我在处理我的代码时遇到了相同的问题。在阅读微软文档时,我发现了 TableEntity 类型的描述。 Azure.Data.TablesTableEntity 类如下所示:

一个类似于字典的 ITableEntity 类型,它将实体上的任意一组属性定义为键值对。

这似乎是 DynamicTableEntity 的替代品。此外,它还实现了:

ITableEntity、ICollection<KeyValuePair<String,Object>>、ICollection<KeyValuePair<TKey,TValue>>、IDictionary<String,Object>、IEnumerable<KeyValuePair<String,Object>>、IEnumerable<KeyValuePair<TKey,TValue>>、IEnumerable 和 IEnumerable

此外,它还具有类型转换帮助方法,可用于以前的 EntityProperty 帮助程序方法。 https://learn.microsoft.com/en-us/dotnet/api/azure.data.tables.tableentity?view=azure-dotnet

这并不是直接替换,确实如此。诚然,我还没有完成我的代码迁移,但看起来它具有正确的对应结构,使得迁移成为可能。 - threadster
抱歉 - 在看到您是正确的之后,我删除了我的评论:DynamicTableEntityAzure.Data.Tables不存在 - 只存在于旧库中:Microsoft.WindowsAzure.Storage.TableMicrosoft.Azure.CosmosDB.TableMicrosoft.Azure.Cosmos.Table - Dai
话虽如此,我并不认为 Azure.Data.TablesTableEntity 类是 DynamicTableEntity 的任何足够替代品,因为它除了通过未经过类型化的 Object this[String key] { get; set; } 索引器属性之外,没有提供获取/设置任意属性的方法。考虑到它是多么未经过类型化,我真的看不出这个新的 TableEntity 类在什么方面比 DynamicTableEntity 有所改进。 - Dai
我目前已经使用TableEntity进行了更改,但仍然不理解DynamicTableEntity的用途。 - sshh

0

对于以后遇到此问题的任何人。这是Azure.Data.Table世界中属性更新的示例。

        public async Task<bool> UpdateField<V>(string partitionKey, string rowKey, string fieldName, V entityProperty)
        {
            var dynamicEntity = new TableEntity
            {
                PartitionKey = partitionKey,
                RowKey = rowKey
            };
            dynamicEntity.Add(fieldName, entityProperty);
            var result = await TableClient.UpdateEntityAsync<TableEntity>(dynamicEntity, ETag.All, TableUpdateMode.Merge);
            if (result == null || result.IsError) return false;
            return true;
    }

请注意 ETag.All,这将简单地更新指定字段而不考虑版本。如果您需要检查正在更新的记录的版本等其他选项,请探索其他选项。还要注意,在此情况下使用 V 作为通用值,因为它是一个已经使用 T 的通用类的一部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接