4

我有一个类似的模型:(简化)

问题:

public class Question
{
    public string QuestionID { get; set; }

    public string Title { get; set; }
    public string Body { get; set; }

    public List<Answer> Answers { get; set; }
}

回答:

public class Answer
{
    public string QuestionID { get; set; }
    public string Body { get; set; }
}

我打算将数据存储在 MongoDB 中,并希望将NoRM与此一起使用。

我的问题是:是否支持延迟加载?或者我可以将它设置为在文档存储上进行延迟加载..?

所以请求一个问题,也检索答案..?(两者都将是存储在 MongoDB 上同一集合中的“帖子”)

4

2 回答 2

9

好的,“延迟加载”的概念对于像 MongoDB 这样的数据库来说大多是陌生的。看看你的架构:有Question一个List.Answers

RDBMS中,“惰性”部分允许您将“列表”与原始部分分开加载。实际上发生了两个查询,您只是想延迟第二个查询。

MongoDB中,只有一个查询发生。Answers嵌入在问题中,因此您的请求会自动Questions包含Answers.

请查看 NORM 示例以获得更好的示例: http: //normproject.org/samples

基本点是你提供的结构不再是多张表。它只是一个包含嵌入式文档的集合。所以“延迟加载”的概念真的没有必要,因为你不能“延迟加载”一个查询。

于 2010-10-24T00:14:31.417 回答
8

我很欣赏这是一个旧线程,但其他人可能仍然会找到它(就像我一样)。延迟加载在 MongoDB 中是可能的,并且由 C# 驱动程序支持。

查看以下类:LazyBsonDocument 和 LazyBsonArray

来自 C# Driver 教程文档:“惰性类的特殊之处在于它们将 BSON 的反序列化延迟到需要它为止。这对于您只需要复杂文档中的一个或两个字段时很有用,因为它不会产生成本反序列化整个文档或数组,但只是必要的部分。这种反序列化一次发生一个级别。

在编写教程文档时可以在这里找到:http: //docs.mongodb.org/ecosystem/tutorial/use-csharp-driver/

给出的示例与涉及嵌套集合的问题非常相似,因此看起来答案列表确实可以延迟加载,如果需要的话。

希望这可以帮助某人,

缺口

于 2013-12-04T08:11:57.290 回答