一次加载多种类型的文档

Load Multiple types of Documents at Once

我有两种不同的文档类型

public class One
{
  public int Id { get;set;  }
  public string Name { get;set; }
}
public class Two
{
  public int Id { get;set; }
  public string Name { get;set; }
}

我有第二个对象包含对这两个文档的引用

public class FeedMeDocs
{
   public One one {get;set;}
   public Two two {get;set;
}

是否可以在 调用数据库中填充给定文档 ID 的 FeedMeDocs 对象。

像这样

var numbers = session.Load<One>("1").AlsoLoad<Two>("2")
              .ProjectInto<FeedMeDocs>();

这是可怕的伪编码,但只是我所追求的内容的一般概念。我查看了 includes 方法,但这似乎不是一个有效的用例,因为这两个文档完全不相关。

OneTwo 真的 aggregate roots 需要直接存储吗(例如:为什么不直接将 FeedMeDocs 存储在 ravendb 中)?你不能以关系数据库的心态进入 documentdb,否则你最终会解决错误的问题。

就是说,如果您要按每个文档的 ID 加载单个文档,那么做您正在尝试的事情相当简单:

var numbers = new FeedMeDocs() {
    one = session.Load<One>("1"),
    two = session.Load<Two>("2")
};

您可以使用 lazy loading:

Lazy<One> oneLazy = session.Advanced.Lazily.Load<One>("ones/1");
Lazy<Two> twoLazy = session.Advanced.Lazily.Load<Two("twos/2");

var numbers = new FeedMeDocs() {
    one = oneLazy.Result,
    two = twoLazy.Result
};

首次访问 Lazy<> 中的一个 Result 时,会话将向服务器查询收集的 Load