当前位置: 首页 > 知识库问答 >
问题:

如何管理Azure表中作为代码中的列表属性的关系

章涵容
2023-03-14

我有一个关于我的类应该如何映射到Azure表存储实体的问题。假设我有两个实体,BikeRider和bikerace。在我的C#代码中,我有两个类,每个类都有一个属性,它是另一个类的集合。因此BikeRider类有一个List属性,反之亦然。如果这不是理想的,请随意发表意见,但这就是我今天所得到的。

如何映射到Azure表中?我在SO中找到了一些问题,讨论了如何存储多对多关系,但我的问题更具体地是,当保存包含List属性的对象时,应该如何处理该属性。

谢谢!

更新当我在等待对此的答复时(我想我可能得不到任何答复),我想到了这个解决方案:

C#BikeRider和BikeRace类型都有一个与另一个类型相同的List属性,如我上面所述。每一个都有一个instance方法将另一个的实例添加到它们的列表中(例如,BikeRace有一个名为“addBikerider”的方法,该方法将BikeRider的实例添加到BikeRace.Bikeriders列表中,反之亦然)。

但是,当我保存到Azure表存储时,有3个表包含以下信息:

  • 分区键、行键、
  • PartitionKey:BikeRider行键
  • 行键:BikeRace行键
  • 其他信息
    null

这里的挑战是Ming发布的内容--如果Table Service save方法为具有List属性的类型抛出异常,您是否可以创建一个更简单的接口,使用它自己的初步save方法来处理List类型,并首先将其转换为可保存的数据类型,以便按照我所描述的方式将其持久化到Azure表中?这是太复杂了,还是太脆弱了?

共有1个答案

楚宏胜
2023-03-14

不支持此操作。表存储不支持列表属性。如果在CLR数据模型中使用列表属性,WCF数据服务将尝试序列化该属性,并导致异常。

若要模拟关系,可以在BikeRace实体上创建属性,如BikeriderID。

如果需要只读集合,可以在BikeRider类中创建方法(而不是属性),例如GetBikeRaces。在实现内部,您可以查询BikeRace表,以查找其BikeRiderID是当前自行车骑手ID的所有实体。如果要更新自行车比赛列表,还需要使用单独的请求更新BikeRider表。

您可以参考http://blog.smarx.com/posts/one-to-many-relationships-in-windows-azure-tables获取示例。

 类似资料:
  • 问题内容: 我是Python的新手,我刚刚发现了属性。当我在一个简单的变量上尝试它时,它工作得很好,但是我无法使其在列表上工作。当执行下面的代码时,它将调用两次getter而不是setter。我知道在我的示例中,该属性没有附加值,但只是为了简化。 有人知道我在做什么错吗? 问题答案: 仅当您直接获取或设置属性时,才使用setter / getter: 如果您修改属性中的元素,则会获得该属性,然后设

  • 我已经制作了一个列[日期,名称,性别和年龄]的表,并将其链接到一个代理。我想使用选择输出框将具有特定名称(属性)的代理分离到特定块。我已经从表中创建了名称作为代理的参数。但是当我试图将条件放入选择输出块((人员)代理)时。name==“ahmed”或agent.name==“ahmed”没有条件为真,所有条件都被绕过到假端口。 我也尝试在代理中声明变量,并尝试将其传递select_output但结

  • 问题内容: 想象一下,我有一些对象的列表: 我需要生成包含另一个列表的在上面的列表: 避免使用循环,是否可以通过使用 apache collections 或 guava 来实现? 哪种方法对我的情况应该有用? 问题答案: Java 8的实现方式:-

  • 问题内容: 当存在时,是否有可能获得全部列表?是否为此准备了电话,还是我必须编写一个foreach循环,如: 问题答案: Java 8及更高版本: 如果需要确保得到结果,则必须将最后一行更改为: Java 7及以下版本: Java 8之前的标准集合API不支持这种转换。您必须编写一个循环(或将其包装在您自己的“地图”函数中),除非您使用一些更高级的集合API /扩展。 (您的Java代码段中的行正

  • 问题内容: 我有一个对象列表。对象具有3个字符串属性。我想制作一个仅包含类中特定属性的列表。 有内置的功能可以做到这一点吗? 问题答案: 列表理解会很好地工作: 但是,由于您要求:-),所以有内置功能的组合。

  • 我正在尝试过滤scala中对象列表的列表属性。例如: 用java定义的类 我的过滤器函数返回字符串列表而不是结果列表 UPDATE我想取回listOf中的所有结果,其中每个结果的名称属性被过滤。