gpt4 book ai didi

c# - 持久保存到 Azure 表存储时使用 POCO

转载 作者:太空狗 更新时间:2023-10-29 18:28:52 26 4
gpt4 key购买 nike

我计划在我的 ASP.NET 5 (MVC 6) 应用程序中使用 Azure 表存储,并添加了 WindowsAzure.Storage NuGet 包,但当我注意到所有这些时,我感到非常失望我的entnty模型需要继承自Microsoft.WindowsAzure.Storage.Table.TableEntity。现在我认为最好的解决方案是拥有 2 组实体,并在我的主域对象和用于保存到表存储的实体对象之间创建映射。我不想将 WindowsAzure.Storage 包添加到我的所有项目中。

已弃用的 azure-sdk-for-net 一度支持 POCO,但我在当前的 WindowsAzure.Storage 中没有看到这一点。

这里的最佳实践是什么?

最佳答案

您没有提供有关尝试写入 Azure 表存储的实体类型的详细信息,但是,如果您的实体包含嵌套的复杂属性,并且如果您想要写入包括复杂嵌套属性的整个对象图(其本身可能包含嵌套属性),这些建议的解决方案都不起作用。

我遇到了类似的问题,并实现了一个通用对象展平器/重构器 API,它将把复杂的实体展平为平面 EntityProperty字典并使其可写入表存储,格式为 DynamicTableEntity .

然后,相同的 API 将从 EntityProperty 重新组合整个复杂对象。字典DynamicTableEntity .

看看:https://www.nuget.org/packages/ObjectFlattenerRecomposer/

我正在与 Azure 团队合作,将此 API 集成到 Azure 存储 SDK 中。您可以在此处查看拉取请求和代码:

https://github.com/Azure/azure-storage-net/pull/337/commits

用法:

//Flatten object of type Order) and convert it to EntityProperty Dictionary
Dictionary<string, EntityProperty> flattenedProperties = EntityPropertyConverter.Flatten(order);

// Create a DynamicTableEntity and set its PK and RK
DynamicTableEntity dynamicTableEntity = new DynamicTableEntity(partitionKey, rowKey);
dynamicTableEntity.Properties = flattenedProperties;

// Write the DynamicTableEntity to Azure Table Storage using client SDK

//Read the entity back from AzureTableStorage as DynamicTableEntity using the same PK and RK
DynamicTableEntity entity = [Read from Azure using the PK and RK];

//Convert the DynamicTableEntity back to original complex object.
Order order = EntityPropertyConverter.ConvertBack<Order>(entity.Properties);

就这些了:)

最新版本的 nuget 包还支持 IEnumerable、ICollection 等类型属性。

该包的 .Net Core 版本在这里: https://www.nuget.org/packages/ObjectFlattenerRecomposer.Core/

CosmosDb Table api 版本的包在这里: https://www.nuget.org/packages/ObjectFlattenerRecomposer.CosmosDb.Table.Core/

关于c# - 持久保存到 Azure 表存储时使用 POCO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33912186/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com