0

我目前正在开发一个以简单层次结构存储数据的应用程序。该模型与此类似(以类似 C# 的语法表示):

class Box {
    int Id { get; set; }
}

class Gadget {
    int Id { get; set; }
    int ParentBox { get; set; }
}

所以,我有几千个盒子,我有零个或多个属于一个盒子的小工具。为了访问数据,我创建了一个小型 REST API,它允许我查询所有框或其中的一个子集。通过 API 的响应是一个数据传输对象,其中包含属于该框的所有小工具。一个典型的 JSON 答案是:

{ "Boxes": [
    { "Id: 1,
      "Gadgets": [
        { "Id": 100 }
        { "Id": 101 }
      ]
    },
    { "Id: 2,
      "Gadgets": [
        { "Id": 200 }
        { "Id": 201 }
      ]
    }
}

不幸的是,结果证明性能很糟糕。获取数据的逻辑是(同样,在类似 C# 的语法中):

var boxes = Db.Select<Boxes>();

foreach (var box in boxes) {
  var boxDto = new BoxDto();
  boxDto.Gadgets = ConvertToDto(Db.Select<Gadget>().Where(q => q.Box == box.Id));
}

我知道我的解决方案很幼稚。我有几万个盒子,每个盒子里都有几十个小工具。我的问题是:

  • 是否有有效管理此类关系的模式?我不是第一个遇到这个问题的人,但我在网上找不到任何东西。
  • 我应该更改数据模型吗?如果是这样,怎么做?

任何想法/反馈将不胜感激。

4

1 回答 1

0

一种可能性是,假设您使用的是 SQL Server,您可以编写一个输出 XML 的查询。通过这种方式,您可以连接数据库中的框和小工具,并返回具有所需层次结构的 XML 文件。

当您的应用程序获取 XML 时,将其转换为 JSON 是一个快速的过程。

或者,对于真正简单的 JSON,您可以在 TSQL 中进行字符串连接。基本上编写自己的 JSON 并从存储过程中返回。但是,如果层次结构很复杂,它会很快变得非常讨厌。

于 2013-07-04T00:07:21.857 回答