MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment réparer {document}. L'ID n'est pas pris en charge erreur

J'avais été confronté au même problème. Après le débogage dans le code MongoDB, j'ai vu qu'un sérialiseur différent est appliqué lors de l'utilisation de l'interface au lieu du type spécifique. Dans ce cas, DiscriminatedInterfaceSerializer est utilisé comme sérialiseur pour l'interface, alors que BsonClassMapSerializer est utilisé pour le type spécifique.

Avec ce sérialiseur pour l'interface, le classmap de la classe d'implémentation n'est pas lié à l'interface. Il ne sait donc pas que Id est le champ id bson et doit être mappé sur la clé '_id'. C'est pourquoi l'exception est levée.

La solution qui a fonctionné pour moi est d'utiliser ImpliedImplementationInterfaceSerializer :

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

Cet attribut enregistre le sérialiseur et définit d'utiliser le classmap bson de l'entité pour IEntity afin que la propriété Id soit correctement mappée. J'ai trouvé cette solution grâce à @Robert Baker dans sa réponse ici :Désérialiser l'objet en tant qu'interface avec le pilote MongoDB C#