MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So beheben Sie den Fehler {document}.ID wird nicht unterstützt

Ich hatte vor dem gleichen Problem gestanden. Nach dem Debuggen im MongoDB-Code habe ich gesehen, dass ein anderer Serializer angewendet wird, wenn die Schnittstelle anstelle des spezifischen Typs verwendet wird. In diesem Fall DiscriminatedInterfaceSerializer wird als Serializer für die Schnittstelle verwendet, während BsonClassMapSerializer wird für den spezifischen Typ verwendet.

Bei diesem Serialisierer für die Schnittstelle wird die Klassenzuordnung der implementierenden Klasse nicht mit der Schnittstelle verknüpft. Es ist daher nicht bekannt, dass Id das bson-ID-Feld ist und dem Schlüssel „_id“ zugeordnet werden sollte. Deshalb wird die Ausnahme ausgelöst.

Die Lösung, die für mich funktioniert hat, ist die Verwendung von ImpliedImplementationInterfaceSerializer :

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

Dieses Attribut registriert den Serializer und definiert die Verwendung der bson-Klassenzuordnung der Entität für IEntity, damit die Id-Eigenschaft richtig zugeordnet wird. Ich habe diese Lösung dank @Robert Baker in seiner Antwort hier gefunden:Objekt als Schnittstelle mit MongoDB C#-Treiber deserialisieren