sql >> Databáze >  >> NoSQL >> MongoDB

Deserializace polymorfních typů pomocí MongoDB C# Driver

Proč máte stejné "public ObjectId Id;" v každé odvozené třídě? To opravdu není dobrý nápad. Skryje nadřazené pole ID.

Chcete-li vyřešit svůj problém, musíte „zaregistrovat“ své odvozené třídy (jako v jakémkoli mechanismu serializace/deserializace). Existují 3 způsoby, jak to udělat:

  1. Deklarativní způsob - ozdobte základní třídu uzlu pomocí:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Obecný způsob - když jsou typy známé v době kompilace:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Dynamický způsob - když jsou typy v době kompilace neznámé:

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

  • Další návrh - použijte LINQ místo Query

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



  1. mapa MongoDB()

  2. $project:Je možné přistupovat k vlastnosti výsledku výrazu pouze v jedné jediné fázi?

  3. Jak přimět klienta ke stažení velmi velkého souboru, který je generován za běhu

  4. redis HLL příliš mnoho falešných poplachů