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

2023-11-24

我计划在我的 ASP.NET 5 (MVC 6) 应用程序中使用 Azure 表存储,并添加了WindowsAzure.StorageNuGet 包,但当我注意到我所有的 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

Usage:

//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/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

持久保存到 Azure 表存储时使用 POCO 的相关文章

随机推荐

  • 如何轻松找到Android类的源代码

    我知道我可以从以下位置访问 android 源代码https android googlesource com 但是如果我只知道包和 android 类的名称 就很难选择正确的 git 存储库 有没有办法找到文件https android
  • 如何使用 yuicompressor-maven-plugin 让 Maven 用缩小的文件构建战争

    所以我正在尝试一些我认为相当简单的事情 我基本上希望 maven 在构建战争之前为我缩小所有 js 和 css 文件 我的插件看起来像这样
  • 访问网页中的网络摄像头

    我正在开发一个网络应用程序 在我的访客注册页面中 我需要访问网络摄像头用于给客人拍照 我拍摄的图像可以存储在指定位置 这将是执行此操作的最佳方式 欢迎使用 java JSP html java 脚本或任何其他方法 回答自己的问题 因为有更好
  • 管理 flutter 的 TextFormField 中的事件

    在 Flutter 项目中 我需要监听 TextFormField 中的输入文本并执行某些操作 特别是当用户在此字段中放置一些字符 例如空格 或请求焦点时 当这种事件发生时 我需要修改filed的值 我知道有一个房产called contr
  • 我如何使用 sklearn DictVectorizer 对列表进行矢量化

    我在 sklearn 文档网站上找到了下一个示例 gt gt gt measurements city Dubai temperature 33 city London temperature 12 city San Fransisco t
  • 使用非格式化文本周围的颜色和变量格式化 console.log

    问题 我编写了一个函数来演示如何以多种方式格式化 Chrome 开发者控制台 console log 消息 然而 我遇到的问题是在左侧打印一个具有配色方案的变量 然后在中间打印一个没有样式的字符串 然后是另一个已设置样式的变量 这是一个图形
  • 使用 String.split() 以引号作为文本分隔符拆分 csv 文件

    我有一个逗号分隔的文件 其中包含许多类似于下面的行 Sachin M Maths Science English Need to improve in these subjects 引号用于转义用于表示多个值的分隔符逗号 现在如何使用逗号分
  • 字符串池创建在Heap的PermGen区或者Object区

    HERE 作者是这么说的 3 在Heap的PermGen区创建字符串池 进行垃圾回收 可以发生在 Perm 空间中 但取决于 JVM 顺便说一下从 JDK 1 7更新 字符串池移至对象所在的堆区 创建的 这样做有什么具体原因吗 我在网上找不
  • 如何使用 appsync 从 DynamoDB 返回 JSON 对象?

    如何从 DynamoDB 获取 JSON 对象响应 我将数据作为 JSON 格式的对象数组存储在数据库中 我有下一个映射模板请求 version 2017 02 28 operation PutItem key userId S conte
  • 创建给定年份中所有日期的向量

    是否有一个简单的 R 习惯用法来获取给定年份中所有日期的序列 除了闰年之外 我可以执行以下操作 dtt lt as Date paste as character year 1 1 sep seq 0 364 显然 我可以添加一行来过滤掉
  • 从 perl 脚本调用 bash 脚本

    我正在尝试 perl 脚本中的代码 需要在 bash 中调用另一个文件 不确定 哪个是最好的方法 我可以直接使用 system 调用它吗 请指导 向我展示示例方法 从我到目前为止所尝试过的 usr bin perl system bash
  • 将所有 POST 数据存储在 SESSION 中

    我有更多来自 POST 的值 超过 20 个 如下所示 name POST name username POST username city POST city mobile POST mobile address POST address
  • 如何检查网页是否存在。 jQuery 和/或 PHP

    我希望能够验证表单以检查网站 网页是否存在 如果它返回 404 错误 那么绝对不应该验证 如果有重定向 我愿意接受建议 有时重定向会转到错误页面或主页 有时会转到您正在寻找的页面 所以我不知道 也许对于重定向 可能会有一个特殊通知 向用户建
  • 圆形/矩形碰撞响应

    所以我不久前建了一点突破克隆 我想稍微升级一下 主要是为了碰撞 当我第一次做到这一点时 我有一个基本的 碰撞 在我的球和砖块之间进行检测 实际上将球视为另一个矩形 但这造成了边缘碰撞的问题 所以我想我会改变它 问题是 我找到了问题的一些答案
  • 检查表是否继承自 PostgreSQL 中的其他表

    在 PostgreSQL 中这些表 CREATE TABLE cities name text population float altitude int in feet CREATE TABLE cities capitals state
  • 在 Angular 的 ng-switch 中使用 html 模板

    我正在制作一个随着用户点击而移动的 交互式菜单 我想知道是否有办法在 ng switch 中包含 html 模板 由于每个 开关 中的所有逻辑都不同 这将导致巨大的 html 文件 div class content div h1 1 h1
  • numpy around/rint 与 astype(int) 相比慢

    所以如果我有类似的东西x np random rand 60000 400 200 iPython 的 timeit says x astype int 需要 0 14 毫秒 np rint x and np around x 需要1 01
  • 如何验证日期?

    我正在尝试测试以确保日期有效 因为如果有人输入2 30 2011那么应该是错误的 我怎样才能对任何日期执行此操作 验证日期字符串的一种简单方法是转换为日期对象并进行测试 例如 Expect input as d m y function i
  • 为什么mysql max_allowed_pa​​cket自动重置为1m

    I set SET GLOBAL max allowed packet 16777216 并且 mysqld max allowed packet 16M 我通过下面的命令检查了 max allowed pa cket SHOW VARIA
  • 持久保存到 Azure 表存储时使用 POCO

    我计划在我的 ASP NET 5 MVC 6 应用程序中使用 Azure 表存储 并添加了WindowsAzure StorageNuGet 包 但当我注意到我所有的 entnty 模型都需要继承时 我真的很失望Microsoft Wind