2013-10-09 1 views
0

Это меня удивляет, что я не нашел однозначного ответа на этот вопрос, так что здесь идет:MongoDB C# driver: Как сериализовать список объектов как список идентификаторов объектов?

Учитывая объектная модель, как это -

public class Foo 
{ 
    public string Id {get; set;} 
    public List<Bar> Bars {get; set;} 
} 

public class Bar 
{ 
    public string Id {get; set;} 
    public string Name {get; set;} 
} 

Как настроить драйвер MongoDB C# в сериализовать экземпляр Foo в документ в базе данных, которая выглядит следующим образом:

{ "Id" : "XXXXX", "Bars" : [ { "Id" : "XXXXX" }, { "Id" : "XXXXX" } ] } 

Foos и бары будут храниться в различных коллекциях. Таким образом, я не хочу делать что-то, что повлияет на все бары, потому что сериализация Bar для коллекции Bar должна содержать все свойства Bar.

Мне не нужны зависимости от драйвера mongodb в классах моделей.

+0

Возможный дубликат [Как иметь дело с ссылкой отдельно хранимых объектов в документах DB, таких как Mongo?] (Http://stackoverflow.com/questions/19034068/how-to-deal-with-referencing-of-separately- stored-objects-in-document-dbs-like-m) – mnemosyn

+0

Я не считаю это обманом. Мой вопрос заключается не в том, является ли это хорошим или плохим. Мой вопрос заключается в том, действительно ли и как я могу сделать сопоставление с настройками на модеме C#. – user2864745

ответ

0

Может быть лучшим кандидатом боян бы MongoDB C# driver - serialization of POCO references?

Во всяком случае, дать ответ вместо волнуюсь по возможным простаков: Нет, это не возможно с водителем C#, чтобы сделать это.

C# драйвер относительно низкоуровневый и не пытается быть объектом-документооборота. Вероятно, можно разработать ODM на основе драйвера C#, поскольку он предлагает несколько крючков, но, как я указал в другом ответе, это чрезвычайно сложная и большая задача, и результат, на мой взгляд, всегда неплотно. Кроме того, с помощью крючков вы, вероятно, получите зависимость от драйвера C# в своем коде, который вам не нужен.

+0

Я тоже не считаю это обманом :) Я предполагаю, что вы имеете в виду, если я написал кучу пользовательских сериализаторов для своих объектов верхнего уровня, я мог бы заставить это работать, но вы предупреждаете об этом? – user2864745

+0

По существу да. «Букет сериализаторов» может сделать трюк для очень ограниченного набора функций, но сложность быстро взрывается. Вероятно, вам нужна прозрачная активация, которая требует довольно умной оболочки. Я считаю, что не требует ORM основной причины для использования NoSQL вообще. – mnemosyn