sql >> Databasteknik >  >> NoSQL >> MongoDB

Deserialisering av polymorfa typer med MongoDB C#-drivrutin

Varför har du samma "public ObjectId Id"; i varje härledd klass? Det är inte riktigt bra. Det döljer föräldra-ID-fältet.

För att lösa ditt problem måste du "registrera" dina härledda klasser (som i alla serialiserings-/deserialiseringsmekanismer). Det finns tre sätt att göra det:

  1. Deklarativt sätt - dekorera basnodklass med:

    [BsonKnownTypes(typeof(PlotNode), typeof(EndNode))]
    
  2. Allmänt sätt - när typer är kända vid kompilering:

    BsonClassMap.RegisterClassMap<PlotNode>();
    BsonClassMap.RegisterClassMap<EndNode>();
    
  3. Dynamiskt sätt - när typer är okända vid kompilering:

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

  • Ett annat förslag - använd LINQ istället för Query

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



  1. Demokratisk kö i Sidekiq

  2. MongoDB $last Aggregation Pipeline Operator

  3. Mest effektiva sättet att få flera hash i Redis?

  4. hur man flyttar data från mysql till redis