MongoDB C#驱动程序 - POCO引用的序列化?

UpT*_*eek 7 c# mongodb mongodb-.net-driver

我正在研究MongoDB.据我所知,官方C#驱动程序可以执行POCO的序列化和反序列化.我还没有找到的信息是如何序列化两个对象之间的引用.[我正在谈论的东西将被表示为两个单独的文档,具有ID链接,而不是嵌入的文档.

序列化机制可以处理这种情况吗?(1):

class Thing {
    Guid Id {get; set;}
    string Name {get; set;}
    Thing RelatedThing {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

或者我们是否必须牺牲一些OOP,并做这样的事情?(2):

class Thing {
    Guid Id {get; set;}
    string Name {get; set;}
    Guid RelatedThing_ID {get; set;}
}
Run Code Online (Sandbox Code Playgroud)

更新:

然后只是几个相关的问题......

a)如果序列化器能够处理情况(1).如何在不使用嵌入的情况下执行此操作的示例是什么?

b)如果使用嵌入,是否可以查询所有"事物",无论它们是"父母"还是嵌入元素?这样的查询怎么样?

Rob*_*tam 12

C#驱动程序可以处理包含对其自身另一个实例的引用的类的序列化(1).然而:

  1. 正如你猜测的那样,它将使用嵌入来表示这一点
  2. 对象图中必须没有循环路径,否则将发生堆栈溢出

如果要将其存储为单独的文档,则必须使用第二个类(2)并执行多个插入.

当对象存储为具有嵌套嵌入的一个大文档时,实际上不可能跨多个级别进行查询.您可能希望查看一些替代方案,例如:

http://www.mongodb.org/display/DOCS/Trees+in+MongoDB