首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何管理代码中列表属性的Azure表中的关系

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

Stack Overflow用户
提问于 2012-06-02 20:42:05
回答 1查看 1.9K关注 0票数 0

关于如何将类映射到Azure表存储实体,我有一个问题。假设我有两个实体,BikeRider和BikeRace。在我的C#代码中,我有两个类,每个类都有一个属性,它是另一个类的集合。因此,BikeRider类具有List属性,反之亦然。如果这不是理想的话,那就随便说吧,但这就是我今天要做的。

那张地图是怎么变成蓝色桌子的?我在这里发现了一些问题,这些问题讨论了如何存储多个到多个关系,但我的问题是,在保存包含该属性的对象时,应该如何处理List属性。

谢谢!

当我在等待回复时更新(并认为我可能没有得到任何回复),我想出了以下解决方案:

正如我前面所述,C# BikeRider和BikeRace类型都具有另一种类型的List属性。每个实例都有一个实例方法来将另一个实例添加到他们的列表中(即BikeRace有一个名为"AddBikeRider“的方法,它将BikeRider的一个实例添加到BikeRace.BikeRiders列表中,反之亦然)。

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

BikeRider表

  • PartitionKey,RowKey,

BikeRider信息RiderRace表

  • PartitionKey: BikeRider RowKey
  • RowKey : BikeRace RowKey
  • Other Info

BikeRace表

  • PartitionKey,RowKey
  • :竞赛中每个BikeRider的ID的单独值( BikeRider RowKey --但可能有很多)。

这样,如果您从BikeRider查询并试图获取他所在的BikeRaces,那么您就有了分区键,并且该分区中的所有行都是BikeRaces。如果您是从BikeRace查询,并试图在一个竞赛中获取所有BikeRiders,则可以使用BikeRider ID来查询BikeRider表。除了将这些键存储在多个位置之外,您不会复制数据,因此,如果数据更改,您就不必使用多个存储位置。

这里的挑战是明发布了什么--如果Tables方法抛出一个带有List属性的类型的异常,您能否用它自己的初步保存方法创建一个更简单的接口,该方法首先处理列表类型并将其转换为可保存的数据类型,然后以我所描述的方式将其保存到Azure表中?这是太复杂,还是太脆弱?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-04 02:51:22

这是不支持的。表存储不支持列表属性。如果在CLR数据模型中使用list属性,WCF数据服务将尝试序列化它,并导致异常。

要模拟关系,可以在BikeRace实体(如BikeRiderID )上创建一个属性。

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10865791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档