Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MongoDB中使用MongoDBRef引用多个外来文档_C#_Mongodb - Fatal编程技术网

C# 在MongoDB中使用MongoDBRef引用多个外来文档

C# 在MongoDB中使用MongoDBRef引用多个外来文档,c#,mongodb,C#,Mongodb,我遇到了这样一种情况,最好将我的领域模型的特定部分表示为关系模型。我阅读了MongoDB中的一节,了解到您可以通过提供一个JSON数组来提供对多个文档的引用,该数组包含对外部集合中各种文档的$ref引用 我所看到的在代码中添加对外来文档的引用的所有示例都只针对单个文档,它们创建了MongoDBRef类型的公共属性。在我看来,这种方法有很多不必要的开销,但它也没有明确说明如何存储对多个文档的引用 如果您想在Mongo中提供外来文档之间的一对多关系,是否需要提供包含MongoDBRef对象的集合属性

我遇到了这样一种情况,最好将我的领域模型的特定部分表示为关系模型。我阅读了MongoDB中的一节,了解到您可以通过提供一个JSON数组来提供对多个文档的引用,该数组包含对外部集合中各种文档的$ref引用

我所看到的在代码中添加对外来文档的引用的所有示例都只针对单个文档,它们创建了MongoDBRef类型的公共属性。在我看来,这种方法有很多不必要的开销,但它也没有明确说明如何存储对多个文档的引用

如果您想在Mongo中提供外来文档之间的一对多关系,是否需要提供包含MongoDBRef对象的集合属性?在我的C#代码中,是否可以坚持使用标准实体对象的集合,并使用BsonClassMap将其映射到Mongo文档

下面是一个简单的类,它代表了我目前拥有的模型。它似乎正确地保存了文档和引用,但我不喜欢公开MongoDBRef对象的公共集合,以及为任何使用Person类的人添加新文档所需的开销

如果有必要的话,我正在使用MongoDB 2.0及其C#驱动程序

//这就是我的类当前的外观
公共阶层人士
{
公共字符串名称{get;set;}
公共列表车辆{get;private set;}
公众人士()
{
车辆=新列表();
}
}
//这就是我想要我的班级的样子
公共阶层人士
{
公共字符串名称{get;set;}
公共列表车辆{get;private set;}
公众人士()
{
车辆=新列表();
}
}

dbref不是存储对已知文档类型的引用的合适工具。相反,只需保存集合中引用文档的_id值即可。如果有一个好的映射库(不确定C,但C相当于pymongo、mongoose、morphia等),它将允许您完全按照自己的意愿进行操作


只有在编译时不知道需要存储引用的文档类型(例如,包含图像或文本等的“内容”字段)时,才应使用DBRefs。

谢谢您的回复。当你说C#等价物可以让我做我想做的事情时,这个功能有名字吗?我已经阅读了关于C#driver的文档,但我没有看到任何关于这方面的内容,所以我希望我只是忽略了一些东西。它通常不是驱动程序功能,坦率地说,我在C3上没有跟上速度。看起来它实际上有点与几个不同的驱动程序混淆,一些与LINQ支持,另一些不太一样。如果你被困在C#上,你可能需要手动操作,或者在github或google代码上寻找一些早期的成果。为什么在文档类型已知的情况下DBREF不合适呢!?
// This is how my class currently looks
public class Person
{
    public string Name { get; set; }
    public List<MongoDBRef> Vehicles { get; private set; }

    public Person()
    {
        Vehicles = new List<MongoDBRef>();
    }
}

// This is what I want my class to look like
public class Person
{
    public string Name { get; set; }
    public List<Vehicle> Vehicles { get; private set; }

    public Person()
    {
        Vehicles = new List<Vehicle>();
    }
}