Невозможно перечислить объекты с помощью MongoDBRef - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть коллекция под названием Products, которую я пытаюсь перечислить, используя официальный драйвер mongo-csharp.Однако, как только я пытаюсь перечислить коллекцию (например, с помощью цикла foreach), я получаю следующую ошибку:

"Конструктор по умолчанию не найден для типа MongoDB.Driver.MongoDBRef"

Класс сущности выглядит следующим образом

public partial class Product
{
    public BsonObjectId _id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string Url { get; set; }
    public int Price { get; set; }
    public string Country { get; set; }
    public MongoDBRef Merchant { get; set; }
}

Запись в коллекции выглядит следующим образом

{
    "_id" : ObjectId("4cff739fba63c20301ee5bc5"),
    "Name" : "Product Name",
    "Description" : "Product Description",
    "Url" : "http://mysite/products/product-name",
    "Price" : 1200,
    "Country" : "au",
    "Merchant" : {
        "$ref" : "Merchant",
        "$id" : ObjectId("533981033d565e640d000000")
    }
}

И я читаю это вот так.

var db = Db.Instance.GetDatabase();
var matches = db.GetCollection<Product>("Product").FindAll();

Я не получаю сообщение об ошибке, пока не выполню одно из следующих действий.

var l = matches.ToList();

ИЛИ

foreach (var p in matches) {
   // Do something
}

1 Ответ

2 голосов
/ 15 декабря 2010
  1. Подключитесь к mongo db с помощью mongovue и убедитесь, что сбор и данные существуют.
  2. Показать код

    var db = Db.Instance.GetDatabase ();

Должно быть что-то вроде этого:

var server = MongoServer.Create("mongodb://localhost:27019");
var db =  server.GetDatabase("database_name");

и чем ваш код:

var matches = db.GetCollection<Product>("Product").FindAll();

3.Я проверил источник драйвера mongo для c # и нашел следующее в MongoDBRef

 // default constructor is private and only used for deserialization
    private MongoDBRef() {
    } 

Так что я предлагаю, чтобы в вашей версии драйвера mongo ребята из команды mongo c # driver забыли о конструкторе по умолчанию. В любом случае, проверьте, пожалуйста, что конструктор существует / не существует, используя отражатель . 4. И я на 99% уверен, что конструктор не присутствует в вашей версии драйвера Монго. Потому что, когда вы начинаете перечислять какой-то монго-драйвер, он будет пытаться обработать данные, и если конструктор по умолчанию не найден, выдает ошибку.

...