sql >> Database >  >> NoSQL >> MongoDB

Hoe {document}.Id wordt niet ondersteund fout op te lossen

Ik had met hetzelfde probleem te maken gehad. Na het debuggen in MongoDB-code, zag ik dat een andere serializer wordt toegepast bij het gebruik van de interface in plaats van het specifieke type. In dit geval DiscriminatedInterfaceSerializer wordt gebruikt als serializer voor de interface, terwijl BsonClassMapSerializer wordt gebruikt voor het specifieke type.

Met deze serializer voor de interface is de classmap van de implementatieklasse niet gekoppeld aan de interface. Het is daarom niet op de hoogte dat Id het bson id-veld is en moet worden toegewezen aan de '_id'-sleutel. Daarom wordt de uitzondering gemaakt.

De oplossing die voor mij werkte, is het gebruik van ImpliedImplementationInterfaceSerializer :

[BsonSerializer(typeof(ImpliedImplementationInterfaceSerializer<IEntity, Entity>))]
public interface IEntity 
{ 
   // snip...
}

Dit kenmerk registreert de serializer en definieert het gebruik van de bson-classmap van de entiteit voor IEntity, zodat de eigenschap Id correct wordt toegewezen. Ik vond deze oplossing dankzij @Robert Baker in zijn antwoord hier:Deserialiseer object als een interface met MongoDB C# Driver



  1. MongoDB-service draait niet in Fedora

  2. hoe een mongo-cursor in een lus in python te herhalen?

  3. Hoe de client een zeer groot bestand te laten downloaden dat on-the-fly wordt gegenereerd?

  4. Moet bij het beveiligen van een reactieformulier en het bijbehorende API-eindpunt de invoer worden opgeschoond, gevalideerd en gecodeerd in browser, server of beide?