gpt4 book ai didi

c# - 使用 TableServiceEntity 将复杂对象插入到 azure 表中

转载 作者:太空狗 更新时间:2023-10-29 18:02:37 25 4
gpt4 key购买 nike

我正在考虑将整个复杂对象添加到表中。由于采用了老式的 SQL 方法,我显然会将其分成表,但我正在尝试一种不同的方法。所以基本上我有一个由嵌套类(有点像反序列化 json 集合时得到的东西)组成的对象,其中包含常见的 Customer、Business 和 InvoiceItems 列表。

public class Business
{
public string _id { get; set; }
public string name { get; set; }
public string street_1 { get; set; }
public string street_2 { get; set; }
public string town { get; set; }
public string county { get; set; }
public string postcode { get; set; }

//other fields as needed
}

public class Customer
{
public string _id { get; set; }
public string name { get; set; }
public string street_1 { get; set; }
public string street_2 { get; set; }
public string town { get; set; }
public string county { get; set; }
public string postcode { get; set; }

//other fields as needed
}

public class InvoiceItems
{
public string item_id { get; set; }
public string price_per_unit { get; set; }
public string quanity { get; set; }
public string date { get; set; }
}

public class WholeObject
{

public Customer customer { get; set; }
public Business address { get; set; }
public List<InvoiceItems> items { get; set; }
}

(确实是示例类)

除了 1MB 大小之外,将其插入到表中还有其他限制吗?我读过 TableServiceEntity ,它应该映射 C# 对象,但是它能处理吗?在现阶段,这是一个非常假设的问题,因为我实际上还没有尝试对其进行编码。任何帮助将不胜感激。

最佳答案

复杂属性不会保存到表存储中。只能保留标准数据类型的子集。检查此链接以获取有关支持哪些数据类型的更多信息:https://learn.microsoft.com/rest/api/storageservices/Understanding-the-Table-Service-Data-Model#property-types

但是,您想做的事情是可能的,只是实现起来有点困难。有两种方法可以实现此目的:

  • 在 WholeObject 类上公开 CustomerSerialized、AddressSerialized 和 ItemsSerialized 属性。让这些属性将其关联的复杂对象序列化/反序列化为字节数组、json 或 XML。这种方法有两个缺点:a) 即使您只需要 Customer 对象,您也始终会从 azure 表存储加载完整的对象树; b) 每个对象的每个属性的大小限制为 64kb,因此您最好确保您的 InvoiceItems 集合可以适合 64kb 序列化

  • 提出一个 PartitionKey/RowKey 架构,允许您将所有类型的相关对象保存为单独的实体,但用 PartitionKey/Rowkey 指示它们的关系。这将允许您独立地获取完整的对象树或各个子对象。这种方法没有第一种方法的两个缺点,但在实现时它绝对是复杂的。它还限制了您根据其他业务需求调整 PartitionKey/RowKey 的能力。我在一家大型电子商务公司中使用过这种方法,并取得了巨大的成功。

在我的项目中,所有实体(根和子)的 PartitionKey 都映射到“WholeObject”的 ID,而 RowKey 由 ParentObjectID、ChildObjectID 和 ChildObjectType 的串联组合组成。当需要检索 WHoleObject 中的所有对象时,只需对 PartitionKey 发出查询,否则使用 PartitionKey 和部分 RowKey 来获取某些类型的对象(即:所有地址)或 PartitionKey 和完整 RowKey 来获取单个对象实体。这种方法支持无限深的对象树结构,但是,一旦实体数量超过 100 个,在一次事务中存储对象就很麻烦了。

关于c# - 使用 TableServiceEntity 将复杂对象插入到 azure 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19885219/

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