MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come correggere l'errore {document}.Id non supportato

Avevo affrontato lo stesso problema. Dopo il debug nel codice MongoDB, ho visto che viene applicato un serializzatore diverso quando si utilizza l'interfaccia anziché il tipo specifico. In questo caso, DiscriminatedInterfaceSerializer viene utilizzato come serializzatore per l'interfaccia, mentre BsonClassMapSerializer viene utilizzato per il tipo specifico.

Con questo serializzatore per l'interfaccia, la mappa delle classi della classe di implementazione non è collegata all'interfaccia. Non è quindi a conoscenza del fatto che Id sia il campo id bson e dovrebbe essere mappato sulla chiave '_id'. Ecco perché viene sollevata l'eccezione.

La soluzione che ha funzionato per me è utilizzare ImplementationInterfaceSerializer :

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

Questo attributo registra il serializzatore e definisce di utilizzare la mappa di classe bson di Entity per IEntity in modo che la proprietà Id venga mappata correttamente. Ho trovato questa soluzione grazie a @Robert Baker nella sua risposta qui:Deserializza l'oggetto come interfaccia con il driver MongoDB C#