MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Десериализиране на полиморфни типове с MongoDB C# драйвер

Защо имате същия "public ObjectId Id;" във всеки извлечен клас? Това не е наистина добра идея. Скрива полето за идентификатор на родител.

За да решите проблема си, трябва да "регистрирате" извлечените си класове (както във всеки механизъм за сериализация/десериализация). Има 3 начина да го направите:

  1. Декларативен начин - украсете базовия възел клас с:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Общ начин - когато типовете са известни по време на компилиране:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Динамичен начин - когато типовете са неизвестни по време на компилиране:

    BsonClassMap.LookupClassMap(typeof(PlotNode));
    BsonClassMap.LookupClassMap(typeof(EndNode));
    

  • Още едно предложение - използвайте LINQ вместо Query

    Node node = collection.AsQueryable().FirstOrDefault(n => n.Id == id);
    



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Трябва ли изрично да затварям връзката?

  2. Съвети за планиране на схема на MongoDB

  3. MongoDB:няма памет

  4. Как да актуализирам полетата на документа на MongoDB само ако не съществуват?

  5. Може ли рамката за агрегиране на MongoDB $group да върне масив от стойности?